2012-09-12 88 views
1

python3中調用多個派生類的基礎構造函數的正確語法是什麼?在多個派生類中調用構造函數

class A: 
    def __init__(): 
     print("A") 

class B: 
    def __init__(): 
     print("B") 

class C(A,B): 
    def __init__(): 
     super().__init__() # ??? 

回答

1

您必須將super調用也放在父類中。我認爲它的工作原理是Csuper得到AAsuper獲取的B

class A: 
    def __init__(self): 
     super().__init__() 
     print("A") 

class B: 
    def __init__(self): 
     super().__init__() 
     print("B") 

class C(A,B): 
    def __init__(self): 
     super().__init__() 

或者使用這種替代,更明確的語法,我更喜歡

class A: 
    def __init__(self): 
     print("A") 

class B: 
    def __init__(self): 
     print("B") 

class C(A,B): 
    def __init__(self): 
     A.__init__(self) 
     B.__init__(self) 

這需要的__init__方法C類的對象上的AB類。

+0

這不是什麼你喜歡的問題。如果您編寫混入類,則必須使用super(),因爲您不知道要調用哪些類。但是,在許多情況下,你不能*使用超類,例如,如果你對不同類中的函數有不同的參數。所以很多時候你的手被迫,你別無選擇。 :-) –

相關問題