继承的实现原理
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=name23 self.Age=age24 self.Sex=sex25 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=course35 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 pass26 27 28 s = Sub()29 # print(Sub.mro())30 # #[, , , ]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这么语言不会真正的限制你 虽然在有的地方会限制,但是不会真正的限制