python:关于 python 类与继承中方法调用 的 一个小知识点记录
(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