2012-03-23 8 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 

私が問題を抱えているのは、引数がスーパークラスとサブクラスの間でどのように渡されるかを理解することです。 Subclass初期化子のすべてのSuperclass引数をリストに戻す必要がありますか? Subclassのみの新しい引数はどこに指定されますか?上記のコードを使用してSubclassをインスタンス化しようとすると、リストには1つの引数だけが含まれています。

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

'自動的に渡される 'ため、'引数は 'ちょうど1つの引数をとる'というのは混乱するかもしれないことに注意してください。 – katrielalex

答えて

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)を呼び出します。それは魔法のようにいくつかの引数をスーパークラスに、そしていくつかはサブクラスにマッチさせようとはしません。

関連する問題