面向对象
修改类和对象的方法。
_init_
对象的绑定方法,对象初始化方法,对象来调用会把对象传过来。
属性查找:包括数据属性,包括方法。
- 数据属性:对象中找——》类中——》父类(按照mro查找)——》obj
- 方法查找:对象的绑定方法——》父类中按照mro列表查找——》obj
绑定方法:
- 定义在类内部,没有被任何装饰器装饰的函数,就是方法
- 给对象来用吗,对象.方法()默认把对象自身传过去 ****特殊之处
- 类来调用就是普通函数,有几个值传几个值
对象之间的交互
- 把一个对象传到另一个对象中,操作这个对象
- 人狗大战
三大特性:继承,封装,多态
- 在类名后的括号中写要继承的类,用逗号分隔
- py中支持多继承(属性查找顺序)
- 新式类和经典类
- 继承了object的类叫新式类,py3中都是新式类。
- 没有继承object的类叫经典类。
- 继承了object的类叫新式类,py3中都是新式类。
- 菱形问题的查找
- 广度优先,新式类
- 深度优先,经典类
- mro列表
- super() 特殊对象,调用父类的方法和属性(严格按照mro列表查找)
- self和super的区别:self一定是从根上找,super()从当前位置按照mro列表找
- 类名,方法(),就是个普通函数,这个就不按照mro列表找了,指名道姓的来用。
- 派生:子类多出来的属性,方法。
多态和多态性
- 多态:一个事物多种形态
- 多态性:执行同一个事物的同一个方法,表现出来的结果是不一样的
- 两种限制子类必须实现什么方法的方式
- abc模块
- raise抛异常
- 鸭子类型:走路像鸭子,就是鸭子,这是面向对象的多态,是多态性的提现。
- len() 调用对象._len_()
封装
- 把属性和方法隐藏
- 以__开头,就会隐藏
- 并没有实际隐藏(做了变形)。外部调用,_类__属性。内部调用,定义方法。
- 隐藏属性,保证数据安全
- 隐藏方法,隔离复杂度
- property 装饰器 包装成数据属性
其他两个装饰器
- classmethon : 类的绑定方法,可以类来调用(对象也可以调用)
- staticmethon : 静态方法,谁都可以调用,不会自动传参数
元类
- _call_
- _new_
- _getattr_
- _setattr_
- _delattr_
反射
通过字符串去获取,删除,修改,对象的属性或方法
- hasattr
- getattr
- setattr
- delattr