Python3 类和对象:继承
1、继承
class DerivedClassName(BaseclassName):
子类 父类
如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性,父类中的方法不受影响
2、继承父类属性并添加子类自己属性的方法
1、调用未绑定的父类方法
class A(): def __init__(self): print("进入A…") print("离开A…") class B(A): def __init__(self): print("进入B…") A.__init__(self) print("离开B…")
2、使用super函数
class A(): def __init__(self): print("进入A…") print("离开A…") class B(A): def __init__(self): print("进入B…") super.__init__(self) print("离开B…")
super函数可以在你没有给定任何基类的名字时,它会自动帮你找出所有基类以及对应的方法
3、多重继承(可能导致钻石继承,即重复调用)
class DerivedClassName(Base1,Base2,Base3):
class A(): def __init__(self): print("进入A…") print("离开A…") class B(A): def __init__(self): print("进入B…") A.__init__(self) print("离开B…") class C(A): def __init__(self): print("进入C…") A.__init__(self) print("离开C…") class D(B, C): def __init__(self): print("进入D…") B.__init__(self) C.__init__(self) print("离开D…") >>> d = D() 进入D… 进入B… 进入A… 离开A… 离开B… 进入C… 进入A… 离开A… 离开C… 离开D…
#A被调用了两次
解决方法:使用super函数
class A(): def __init__(self): print("进入A…") print("离开A…") class B(A): def __init__(self): print("进入B…") super().__init__() print("离开B…") class C(A): def __init__(self): print("进入C…") super().__init__() print("离开C…") class D(B, C): def __init__(self): print("进入D…") super().__init__() print("离开D…") >>> d = D() 进入D… 进入B… 进入C… 进入A… 离开A… 离开C… 离开B… 离开D…