目录

一、定义类和对象

1.定义类

2.创建一个对象

2.1 创建一个实例对象并调用实例方法

2.2 创建另一个实例对象:

2.3 添加实例属性

二、__init__(self)

1. __init__(self) 声明多个实例属性

2.__init__传参        改进

3 __init__总结

三、self

四、魔术方法:

__new__和__init__区别

其他魔术方法简单介绍


'''

面向对象编程:oop[object oriented programming] 是一种python编程思路

面向过程:就是我们一开始学习的,按照解决问题的步骤取写代码【根据业务逻辑去写代码】
在思考问题的时候,首先分析‘怎么按步骤去实现’,然后将问题解决拆解为若个个步骤,并将这些步骤对应成方法一部一部的最终完成功能【按步骤洗车】

面向对象:关注的是设计思维【找洗车店 给钱洗车】

从计算机角度来看:面向过程不适合做大项目,而面向对象适合做更大项目的设计

类和对象
类:类是具有一组 相同或相似特征【属性】和行为【方法】的一系列[多个]对象的集合

现实世界            计算机世界
行为----------------> 方法
特征----------------> 属性

对象:对象是实实在在的一个东西,类的实例化,具象化

类是对象的抽象化  而对象是类的一个实例

实例方法:在类的内部,用def 关键字定义 第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】
实例方法是归于类的实例所有

属性:定义在类内方法外的变量称为【类属性】 
在方法内部定义的【通过使用类似于self.变量名】变量 称为实例属性

'''

一、定义类和对象

1.定义类

(类结构 类名 属性 方法)

class 类名:
    属性
    方法

class Person:      # 类名一般用大驼峰命名法'''对应人的特征'''name='小明'          #类属性age=20            '''对应人的行为'''def __init__(self):    #   __魔术方法__self.name1='小明1'   #  实例属性passdef eat(self): #实例方法:归实例所有   # 第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】print('大口的吃饭')passdef run(self):         #实例方法print('飞速的跑')passpass

注意第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】

2.创建一个对象

2.1 创建一个实例对象并调用实例方法

# 创建一个对象【类的实例化】
# 规则格式 对象=类名()
xm=Person()
xm.eat()    #调用函数
xm.run()
print("{}的年龄是:{}".format(xm.name,xm.age))      #小明的年龄是:20
print("{}的年龄是:{}".format(xm.name1,xm.age))      #小明1的年龄是:20

运行结果:

2.2 创建另一个实例对象:

# 创建另一个实例对象
xw=Person()              #创建出来的
xw.eat()                 #实例方法

2.3 添加实例属性

# 添加实例属性
xw.sex='男'             # 添加实例属性 属于实例私有的属性
xw.pro='生物信息'             # 添加实例属性 属于实例私有的属性
print(xw.sex)

运行结果:

# 如果有n个这样的对象被实例化 那么就需要添加很多次实例属性了 显然比较麻烦
# 引出 __init__(self)

二、__init__(self)

1. __init__(self) 声明多个实例属性

class People:def __init__(self):   # 默认被调用   #__方法名__ 为内置魔术方法'''实例属性的声明和初始化'''self.name='小倩'   # 实例属性初始化self.sex='女'self.age='18'passdef eat(self):         # 实例属性'''吃的行为:return:'''print('喜欢吃猕猴挑')passpassxq=People()    #此时xq已经拥有name,sex,age三种实例属性了
print(xq.name,xq.sex,xq.age)
xq.name='大倩'
xq.sex='女'
xq.age='19'
print(xq.name,xq.sex,xq.age)

运行结果:

2.__init__传参        改进

# __init__传参    改进
class People:def __init__(self,name,sex,age):   # 默认被调用   #__方法名__ 为内置魔术方法'''实例属性的声明和初始化'''self.name=name   # 实例属性初始化self.sex=sexself.age=agepassdef eat(self,food):         # 实例方法'''吃的行为:return:'''print(self.name+'喜欢吃'+food)passpass
zhangheng=People('张衡','男',22)
print(zhangheng.name,zhangheng.age)    # 张衡  22lh=People('李辉','男',18)
print(lh.name,lh.age)                 #李辉 18
lh.eat('苹果')                      #李辉喜欢吃苹果
zhangheng.eat('饺子')            #张衡喜欢吃饺子

运行结果:

3 __init__总结

1.Python 自带的内置函数 具有特殊的函数 使用双下划线包起来的【魔术方法】

2.是一个初始化的方法,用来定义实例属性 和初始化数据的,在创建对象的时候自动调用 不用手动去调用

3.利用传参的机制可以让我们定义功能更加强大并且方便的 类

三、self

# self
class PersonB:'''定义类'''def getSelf(self):       #python解释器会自动把这个实例对象作为第一个参数传递给selfprint('self=%s'%id(self))passdef eat(self,name,food):print('%s喜欢吃%s,职业是%s'%(name,food,self.pro))passdef __init__(self,pro):''':param pro: 专业'''self.pro=pro       # 实例属性的定义pass# ld是一个新的实例化对象
ld=PersonB('生信')
ld.getSelf()
print('ld=%s'%id(ld))  # self与实例对象ld  内存地址相同
ld.eat('罗滴','水果')     # 罗滴喜欢吃水果

运行结果:

python解释器会自动把实例对象作为第一个参数传递给self,可以通过后面两者内存地址相同可知,self即是ld这个实例对象的引用。

self总结:

self只有在定义 实例方法的时候才有意义,在调用不必传入相应参数,由解释器 自动去指向

self的名字是可以更改的 可以定义成其他的名字,只是约定俗成的定义成self

self 指的是 类实例对象本身,相当于java中的this关键字

四、魔术方法:

类似 __str__   __new__  都是python内置的魔术方法

# 魔术方法
# __str__
# __new__
class People:def __init__(self,name,age,food):  # 默认被调用   #__方法名__ 为内置魔术方法''':param name: 名字:param age: 年龄:param food: 食物'''self.name=name   # 实例属性初始化self.age=ageself.food=food#测试print('-------------init执行---------')passdef __str__(self):'''打印对象 自定义对象内容格式的:return:'''return '%s今年%d喜欢吃%s'%(self.name,self.age,self.food)def __new__(cls, *args, **kwargs):                     # 不写会自动补一个new'''创建对象实例的方法  每调用一次 就会生成一个新的对象 cls 就是class的缩写场景: 可以控制创建对象的一些属性,经常用来做单例模式的时候来使用:param args::param kwargs:'''# 测试print('=============new执行==========')return object.__new__(cls)      # 在这里是真正创建对象实例的pass
zhh=People('张衡',22,'汉堡')
print(zhh)    # 张衡今年22喜欢吃汉堡           # 没有__str__会只输出地址  先new对象才能init

__new__和__init__区别

__new__ 类的实例化方法 必须要返回(return)该实例 否则对象就创建不成功

__init__ 用来做实例属性的初始化操作 也可以认为是实例的构造方法 接受类的实例 self 并对其进行构造

__new__ 至少有一个参数 是cls 代表要实例化的类, 此参数在实例化时由python解释器自动提供

__new__ 函数要先于__init__函数 执行

其他魔术方法简单介绍

__str__ 自定义对象内容格式的 打印对象 没有__str__会只输出地址 必须return
__class__ 查看对象所在的类
__del__ 析构方法 不写会自动补一个del
__mro__ 方法解析顺序  
__call__将实例对象以函数的形式调用

2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)相关推荐

  1. Python OOP:面向对象基础,定义类,创建对象/实例,self,创建多个对象,添加对象属性,访问对象属性,__init__方法,带参数的__init__,__str__方法,__del__方法

    一.理解面向对象 面向对象是⼀种抽象化的编程思想,很多编程语⾔中都有的⼀种思想. ⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使用的,不用去管他内部的情况.⽽编程就是设置事物能够做什么事. ...

  2. python怎么定义名称_python 之 面向对象基础(定义类、创建对象,名称空间)

    第七章面向对象 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流 ...

  3. python类的定义和使用_Python3基础之python 之 面向对象基础(定义类、创|python基础教程|python入门|python教程...

    第七章面向对象 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流 ...

  4. python学习记录1(基础知识)

    python是动态语言,使用变量时不需要定义类型,可以直接赋值 例如 a = 10 b = 'a' c = "hello world" 也不需要在结尾加上分号 # 输入 默认字符串 ...

  5. 蜗牛一步一步地往上爬的Python学习记录

    Python学习记录 前言 简介 基础知识 类型变量 高级特性 函数式编程 高阶函数 偏函数 装饰器decorator 匿名函数 前言 第一,绝对不断更: 第二,绝对认真写: 第三,绝对撰写的公正漂亮 ...

  6. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  7. 个人python学习-Day7面向对象基础(上)

    一.面向对象介绍 1.概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的 ...

  8. java预科基础篇2021.2.3学习记录

    java预科基础篇2021.2.3学习记录 初识博客 本以为老师会讲是在微博上写博客做记录,没想到会是很多程序员专用的博客 博客为音译,正确翻译结果为网络日记,英文为bog 较为专业的程序员用博客为: ...

  9. 2021最新python学习视频教程

    本文包含了千锋教育Python学习路线全阶段视频教程(从入门到精通),涵盖了你所需要掌握的所有前沿技术及知识点! 2021年全网最新,史上最全Python学习路线,从基础到项目实战应有尽有,牛批卡拉斯 ...

最新文章

  1. 吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)
  2. socket 非阻塞 linux,linux 非阻塞式socket编程求助。。
  3. Android中contentProvider的用途
  4. mysql金额数字转成中文_数字转换成汉字金额(转)
  5. python单例模式继承_Python四种实现单例模式的方法
  6. JDK8新特性(八)之Stream流的map()、sorted()、distinct()、match()方法
  7. Google登录提示错误码12501
  8. delphi7 调用XE编译的DLL遇到的坑
  9. 大数据量JSONObject.fromObject性能问题(大数据传给前台)
  10. [转]摄影入门导购-基于预算的器材解决方案
  11. 关于PLC控制伺服电机找原点
  12. js中0.1+0.2为什么不等于0.3
  13. GKCTF2020 逆向部分题的复现
  14. 我们为什么选择NEXTCHIP?为什么要选择ISP?为什么要选择AHD?为什么选择北京冠宇铭通?
  15. 天嵌TQ335X开发板学习-1
  16. 嵌入式系统中鲁棒性的理解
  17. Java处理文件上传 00 截断问题
  18. 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记
  19. python多因子量化选股模型_【邢不行|量化小讲堂系列12-Python量化入门】法码三因子选股模型,有多少人可以跑赢...
  20. 微信转盘抽奖前端源码(三):移动端浏览器兼容性(12个奖品,指针开始时指向奖品)

热门文章

  1. 【Unity基础】Time实现一个间隔时间做某事每秒移动x米
  2. 微信小程序商城怎么推广?看这里!
  3. Json转换利器Gson之实例五-实际开发中的特殊需求处理
  4. 易中天PK三国之经典语录!
  5. 使用jacob将docx转换为doc,遇到各种坑,一一为大家填好
  6. PC通过网线连接树莓派4B
  7. Bootstrap快速入门(含旅游网案例)
  8. 【C++天梯计划】1.9 回溯法(bark tracking method)
  9. 神位纷争服务器维护,神位纷争steam版3月12日版本更新公告
  10. BDD课题研究之测试思想和方法总结(一)