我们很方便通过__init__()
从子类中调用super().__init__()
,但是当我想从孙子中调用__init__()
时该怎么办?例如:
class A(Base):
def __init__(self):
...
class B(A):
def __init__(self):
...
class C(B):
def __init__(self):
...
那么如何在A.__init__()
内{strong>不呼叫C.__init__()
内呼叫B.__init__()
呢?显然,您可以在super().__init__()
和B.__init__()
中都包含C.__init__()
。但是由于某些特殊原因,我需要避免调用B.__init__()
(即在super().__init__()
内部调用C.__init__()
),那我该怎么办?
答案 0 :(得分:1)
您可以直接调用上层类的 init 函数:
class C(B):
def __init__(self):
A.__init__(self)
...
但是,跳过层次结构中的类的整个想法必然会在将来引起问题。
根据导致您想要此原因的原因,您可以:
答案 1 :(得分:1)
非常简单。您只需要在A.__init__(self)
类构造函数中调用C
。
例如,假设A类是:
class A():
def __init__(self):
print('a')
和B类一起,实现A类:
class B(A):
def __init__(self):
super().__init__()
print('b')
然后您可以像这样实现C类:
class C(B):
def __init__(self):
A.__init__(self)
print('c')
所以输出将是:
In[1]: obj1 = A()
a
In[2]: obj2 = B()
a
b
In[3]: obj3 = C()
a
c