2012-03-23 57 views
18

我對如何在Python中的子類和超類之間傳遞參數有點困惑。考慮下面的類結構:子類 - 來自超類的參數

class Superclass(object): 
    def __init__(self, arg1, arg2, arg3): 
     #Inilitize some variables 
     #Call some methods 

class Subclass(Superclass): 
    def __init__(self): 
     super(Subclass, self).__init__() 
     #Call a subclass only method 

在那裏我遇到問題是理解如何將參數的超類和子類之間傳遞。是否有必要重新列出子類初始化程序中的所有超類參數?哪裏只有新的子類,參數被指定?當我嘗試使用上面的代碼實例化一個子類時,它只需要1個參數,而不是我列出的原始4(包括自己)。

TypeError: __init__() takes exactly 1 argument (4 given) 
+1

請注意,'只需要1個參數'可能會造成混淆,因爲該參數是'self'(自動傳遞)。 – katrielalex 2012-03-23 14:03:23

回答

17

沒有魔法發生! __init__方法與所有其他方法一樣工作。您需要在子類初始化程序中明確地獲取所需的所有參數,並將它們傳遞給超類。

class Superclass(object): 
    def __init__(self, arg1, arg2, arg3): 
     #Initialise some variables 
     #Call some methods 

class Subclass(Superclass): 
    def __init__(self, subclass_arg1, *args, **kwargs): 
     super(Subclass, self).__init__(*args, **kwargs) 
     #Call a subclass only method 

當你調用Subclass(arg1, arg2, arg3) Python會只是調用Subclass.__init__(<the instance>, arg1, arg2, arg3)。它不會奇蹟般地嘗試將超類的一些參數和一些參數匹配到子類。