继承的实现原理
Python支持多继承
多继承的时候 属性查找的顺序
研究经典类和新式类在属性查找的不同
主要是形成菱形关系才有深度跟广度
广度优先
Python的继承原理 Python3的内置方法进行顺序查找
c3线性算法 F.mro()
子类重用父类的方式
super()专门引用父类的一些属性 是一个特殊的对象 参照mro列表
从当前类的父类往后找
依赖于继承 按照mro列表去找
示例
1 """ 2 Description: 3 Author:Nod 4 Date:18-05-06 5 Record: 6 #---------------------------------v1-----------------------------------# 7 """ 8 9 """ 10 11 super()专门引用父类的一些属性 是一个特殊的对象 参照mro列表 12 13 从当前类的父类往后找 14 依赖于继承 15 16 17 18 """ 19 20 class OldboyPeople: 21 def __init__(self,name,age,sex): 22 self.Name=name 23 self.Age=age 24 self.Sex=sex 25 26 def tell_info(self): 27 print('info is %s-%s-%s'%(self.Name,self.Age,self.Sex)) 28 29 30 class Student(OldboyPeople): 31 def __init__(self,name,age,sex,course): 32 # OldboyPeople.__init__(self,name,age,sex) 33 super().__init__(name,age,sex) 34 self.Course=course 35 36 def tell_info(self): 37 print(' student info') 38 #OldboyPeople.tell_info(self) 39 super().tell_info() 40 41 stu1=Student('nod','25','F','Linux') 42 stu1.tell_info()
super方法的补充
super 先找自己类 再去foo 再去 bar
super从当前类为起始 再找到当前类的下一类 完全参照
mro列表
严格按照mro列表
1 """ 2 Description:super总结 3 Author:Nod 4 Date:18-05-05 5 Record: 6 #---------------------------------v1-----------------------------------# 7 """ 8 9 10 class Foo: 11 def f2(self): 12 print('foo.f2') 13 14 def f1(self): 15 print('Foo f1') 16 super().f2() # super的查找会按照mro列表查找 直接找到当前类的下一个;完全参照mro列表 17 18 19 class Bar: 20 def f2(self): 21 print('Bar f2') 22 23 24 class Sub(Foo, Bar): 25 pass 26 27 28 s = Sub() 29 # print(Sub.mro()) 30 # #[<class '__main__.Sub'>, <class '__main__.Foo'>, <class '__main__.Bar'>, <class 'object'>] 31 s.f1()
Python 的多态与多态性
Python不限制输入,建议人们约定俗称的去遵守
记住那个谚语,只要长得像鸭子就是鸭子而不管它到底是不是鸭子;如果
一定去甄别什么是什么 什么是鸭子的话 那就是继承的关系 继承在一定程度上影响了代码的低耦合
造成了高耦合;
因为一旦修改了父类,可能会对子类有一定的影响
示例代码
1 class Disk: 2 def wirte(self): 3 print('write to disk') 4 def read(self): 5 print('read from disk') 6 7 8 class Process: 9 def write(self): 10 print('write to process') 11 12 def read(self): 13 print(' read from process')
Python这么语言不会真正的限制你 虽然在有的地方会限制,但是不会真正的限制