2019年7月25日 类的继承 1
面向对像: 继承,多态,封装
class ParentClass1: pass class ParentClass2: pass class SubClass(ParentClass1):#单继承 pass class SubClass2(ParentClass1,ParentClass2):#多继承 pass
子类定义的属性如果喝父类属性重名了,则优先调用子类的,没有覆盖这一说
什么时候用继承:
1.当类中有显著不同,并且较小类事较大类所需要的组件时,用组合。
2.当类中有许多相同功能,提取这些共同的功能做成基类,用继承。
继承同时具有两种含义:
1.继承与派生:减小代码重用。(不独立,不推荐)
2.声明某个子类兼容某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法。(vip 推荐)
class Dad: money=10 def __init__(self,name): print('Dad') self.name=name def hit_son(self): print('%s 正在hit son'%self.name) class Son(Dad): money=55 #优先调用子类的,但不是覆盖 s1=Son('sxj')#son继承类dad的属性方法,dad存在需要传递参数 name print(s1.money,s1.name,Dad.money) s1.hit_son()
》》》》
Dad
55 sxj 10
sxj 正在hit son
接口继承:归一化设计。做出一个良好的抽象,这个抽象规定了一个兼容接口。
import abc #接口继承强制子类起到限制作用 class All_file(metaclass=abc.ABCMeta):#接口继承:定义父类,规定必须有read 和 write 方法,父类可以不实现,子类中但必须要有这2个方法 @abc.abstractclassmethod#下面但抽象方法(强制子类必须有read和write方法) def read(self): pass def write(self): pass class Disk(All_file): def read(self): print('Disk read') def write(self): print('Disk write') class CDrom(All_file): pass class Mem(All_file): pass d1=Disk() d1.read() d1.write()
》》》
Disk read
Disk write