python 中会出现钻石继承问题,如下所示
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…
钻石继承带来的问题:基类可能被多次调用,不符合设计的初衷。
解决方法:python 中提供了一个方法解析顺序(MRO),在同一个类避免被调用多次的前提下,使用广度优先和从左到右的原则去寻找需要的属性和方法。可以使用类名.__mro__ 来获取MRO顺序
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…
转载于:https://www.cnblogs.com/liupeng520/p/5983838.html
相关资源:带标签_超详细笔记以及拓展延伸知识点总结_小甲鱼零基础入门学习python系列教程