エラーが発生します: TypeError: __init__() は正確に 2 つの引数を取ります (3 つ指定)
クラス Top からオブジェクトをインスタンス化しようとすると、次のようになります。
super(Middle1, self).__init__(name, "middle")
class Base(object):
def __init__(self, name, type):
pass
class Middle1(Base):
def __init__(self, name):
super(Middle1, self).__init__(name, "middle1")
class Middle2(Base):
def __init__(self, name):
super(Middle2, self).__init__(name, "middle2")
class Middle3(Base):
def __init__(self, name):
super(Middle3, self).__init__(name, "middle3")
class Top(Middle1, Middle2, Middle3):
def __init__(self):
super(Top, self).__init__("top")
# Here is where it produces the error
if __name__ == '__main__':
Top()
この多重継承の問題について私が理解していないことは何ですか?
注: これは python 2.7 です
編集
わかりましたので、自分のケースでうまくいくと思うものを試しました。これは同等の最終結果です。基本的に、スーパーを呼び出さずに個々の __init__ を呼び出すことで、最初に深さを強制していると思います。
class Base(object):
def __init__(self, name, type):
pass
class Middle1(Base):
def __init__(self, name, type = "middle1"):
super(Middle1, self).__init__(name, type)
class Middle2(Base):
def __init__(self, name, type = "middle2"):
super(Middle2, self).__init__(name, type)
class Middle3(Base):
def __init__(self, name, type = "middle3"):
super(Middle3, self).__init__(name, type)
class Top(Middle1, Middle2, Middle3):
def __init__(self):
Middle1.__init__(self, "top")
Middle2.__init__(self, "top")
Middle3.__init__(self, "top")
# No errors anymore
if __name__ == '__main__':
Top()