Python 面向对象(三)

继承的实现原理

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()
View Code

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()
View Code

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')
View Code

 Python这么语言不会真正的限制你 虽然在有的地方会限制,但是不会真正的限制

原文地址:https://www.cnblogs.com/nodchen/p/8999819.html