Python深入类和对象

一,鸭子类型和多态----
1,鸭子类型:例如list.extend方法
lis = [1,2]
a = (3,4)
b = {2,6}
c = [4,5]
lis.extend(a) / lis.extend(b) / lis.extend© 都可以运行
由此可见:python中所谓的鸭子类型实际就是指动态语言在调用方法时不检查类型,只有方法正确,参数正确就可以被调用
2,多态:运行代码时和实际定义的时候不一样
Python深入类和对象
(实际调用的时候才知道这个对象是被定义的类型)
二,抽象基类----
2.1,特点:
1、类中的方法不能被实例化;(如果实例化则代码报错)
2、子类需要重写父类中的方法
2.2,应用场景:
1、检查某个类的属性
2、类和对象的变量(强制子类必须实现父类中的方法)
Python深入类和对象
三,类的属性和实例属性查询的顺序----
3.1、金典类(深度优先DFS)版本2.2
广度优先(BFS)
遵循C3算法 (mro)版本3以上

四,对象的自省机制-----
4.1、包含的函数有:dir() / type() / hasattr() / isinatance()
得知对象的类型、判断对象是否存在某个属性
4.2、type()和isinstance()的区别:
放在类中来考虑:isinstance()考虑到类中的继承关系
type() 不考虑类的继承关系
例如:
class A():
pass

class B(A):
pass

res = B()
print(isinatance(res,A)) 判断结果为 true
print(type(res,A)) 判断结果为fasle

五,super函数----
5.1,函数执行的顺序实际是按照_mro_算法来的;
5.2,重写父类中的方法,为什么还要用super().init(self)去调用父类:
1、避免子类重复写父类中的代码
2,、扩展子类的属性