[英]How to call super().super()?
我們通過super().__init__()
__init__()
很方便,但是當我想從孫子調用__init__()
時該怎么辦? 例如:
class A(Base):
def __init__(self):
...
class B(A):
def __init__(self):
...
class C(B):
def __init__(self):
...
那么如何在不調用B.__init__()
() 的情況下調用C.__init__()
A.__init__()
內部的 A.__init__() 呢? 顯然,您可以在B.__init__()
和C.__init__()
中包含super().__init__()
__() 。 但是由於某些特殊原因,我需要避免調用B.__init__()
(即在C.__init__()
super().__init__()
() ),那我該怎么辦?
你可以直接調用上層的init function:
class C(B):
def __init__(self):
A.__init__(self)
...
但是,在層次結構中跳過 class 的整個想法必然會在未來引起問題。
根據導致您想要這個的原因,您可以:
就是這么簡單。 您只需要在C
class 構造函數中調用A.__init__(self)
即可。 例如,假設 A class 是:
class A():
def __init__(self):
print('a')
和 B class,實現 A class:
class B(A):
def __init__(self):
super().__init__()
print('b')
然后你可以像這樣實現 C class :
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.