类的继承

继承   子类继承父类所有属性     如果属性名重名了,则先从子类开始找,不会覆盖父类的属性

 1 class Dad:
 2     money = 10
 3 
 4     def __init__(self, name):
 5         print('开始')
 6         self.name = name
 7 
 8     def hit_son(self):
 9         print('%s 正在打儿子' % self.name)
10 
11 
12 class Son(Dad):
13     money = 1100000000   # 与父类重名了,不会覆盖父类的属性
14     pass
15 
16 
17 s1 = Son('haha')
18 print(s1.money)
19 print(Dad.money)
20 输出:
21 开始
22 1100000000
23 10

 如果A类继承B类,那么当A类进行实例化的时候,首先在A类中寻找init的方法,如果没有,就从B类中寻找。

传递的参数就按照找到的那个init方法进行传参。调用函数属性的时候也是先从本类中寻找,如果本类中有,就执行本类的函数,如果没有就从父类中寻找后执行

 1 class Dad:
 2     money = 10
 3 
 4     def __init__(self, name):
 5         print('开始')
 6         self.name = name
 7 
 8     def hit_son(self):
 9         print('%s 正在打儿子' % self.name)
10 
11 
12 class Son(Dad):
13     money = 1100000000   # 与父类重名了,不会覆盖父类的属性
14     def hit_son(self):
15         print('这是子类')
16 
17 
18 s1 = Son('haha')
19 print(s1.money)
20 print(Dad.money)
21 s1.hit_son()
22 输出:
23 开始
24 1100000000
25 10
26 这是子类

什么时候用继承:1.类之间有显著的不同,并且较小的类是较大的类所需要的组件时,用组合

2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承

接口类   必须实现父类的方法,否则无法创建子类

 1 import abc
 2 
 3 
 4 class AllBasic(metaclass=abc.ABCMeta):
 5     @abc.abstractmethod
 6     def read(self):
 7         pass
 8 
 9     @abc.abstractmethod
10     def write(self):
11         pass
12 
13 
14 class Mem(AllBasic):
15     def read(self):
16         print('写方法')
17 
18     def write(self):
19         print('写方法')
20 
21 
22 s1 = Mem()

继承顺序    python3中是使用广度优先。

posted @ 2020-03-06 20:22  竹石2020  阅读(120)  评论(0编辑  收藏  举报