2016-07-22 11 views
1

私は、私が主題についてグーグルで行ったので、他のすべてのページが、範囲を超えた詳細について過度に単純なケースやランダムな議論に発展しているようだから、この質問をしています。Python 2.7で引数を持つsuper()の使い方は?

class Base: 
    def __init__(self, arg1, arg2, arg3, arg4): 
     self.arg1 = arg1 
     self.arg2 = arg2 
     self.arg3 = arg3 
     self.arg4 = arg4 

class Child(Base): 
    def __init__(self, arg1, arg2, arg3, arg4, arg5): 
     super(Child).__init__(arg1, arg2, arg3, arg4) 
     self.arg5 = arg5 

これは私が試みたものです。私はclassobjではなくタイプを使用する必要があると言われていますが、その意味とGoogleが役に立たないことはわかりません。

私はうまくいきたいです。 Python 2.7でこれを行う正しい方法は何ですか?

+0

の可能性のある重複した基底クラスは、オブジェクトから継承されていない場合はどう(http://stackoverflow.com/questions/489269/python-super-raises-typeerror) – Jokab

答えて

6

ベースクラスはobject(新しいスタイルクラス)から継承し、superへの呼び出しはsuper(Child, self)である必要があります。

arg5からBase__init__にも渡す必要があります。

class Base(object): 
    def __init__(self, arg1, arg2, arg3, arg4): 
     self.arg1 = arg1 
     self.arg2 = arg2 
     self.arg3 = arg3 
     self.arg4 = arg4 

class Child(Base): 
    def __init__(self, arg1, arg2, arg3, arg4, arg5): 
     super(Child, self).__init__(arg1, arg2, arg3, arg4) 
     self.arg5 = arg5 
+0

[Pythonのスーパーは、()はTypeErrorを発生させます] ? – user6596353

+0

いいえ、私は人々がそれを昔のスタイルでどのようにしたのでしょうか? – user6596353

+1

@ user6596353クラス名では、推奨される方法ではありません: 'Base .__ init __(arg1、arg2、arg3、arg4)' – DeepSpace

関連する問題