标签:object init 机制 cal pre pass __init__ 方法调用 实现
(1)D类,多继承于C类与B类,C类与B类继承于A类。C类中没用__init__(), C类的实例化会先寻找第一个继承类是否存在__init__(),也就是B类的__init__()。因为python3中使用的是广度优先的方法,寻找路径为D-->B-->C-->A
关于其他方法的继承,也是这个顺序。
class A(object): def __init__(self): print("i am A") def call(self): print("A CALL") class B(A): def __init__(self): print("i am B") def call(self): print("B CALL") class C(A): def __init__(self): print("i am C") def call(self): print("C CALL") class D(B,C): pass d= D() d.call()
(2)C类继承于B类与A类,A类继承于_A类。 A 、B 和_A类中都有一个call()方法, _A类中有一个xcall()方法,是用来调用_A中的cal()的。
实例化C类后,c的实例调用_A的xcall()方法,实现的其实是B类中的call(). 这个也是广度优先机制。
class _A(object): def __init__(self): print("i am _A") def xcall(self): self.call() def call(self): print("A CLL") class A(_A): def __init__(self): print("i am A") def call(self): print("A CLL") class B(object): def __init__(self): print("i am B") def call(self): print("B CLL") class C(B,A): pass
关于 python 类与继承中方法调用 的 一个小知识点记录
标签:object init 机制 cal pre pass __init__ 方法调用 实现
原文地址:https://www.cnblogs.com/gtq7512/p/11371736.html