【发布时间】:2017-07-30 19:31:28
【问题描述】:
我得到错误: 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
编辑
好的,所以我尝试了一些我认为适合我的情况的方法。这是等效的最终结果,我认为它基本上是通过不调用 super 而是调用每个单独的 __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()
【问题讨论】:
-
这在技术上不是多重继承。多重继承是指一个类直接从多个父类继承(大多数编程语言通常不支持)。
-
您检查过您正在执行的代码文件就是您在此处显示的那个吗?因为这段代码不会产生那个错误......
-
你是对的。我已经编辑了代码以显示我的实际情况,现在它会产生该错误。
-
我也会向您推荐stackoverflow.com/questions/3277367/… 这个问题。 (您的问题可能应该作为这个问题的副本关闭,但我认为基于您的特定代码的答案很有用,当我自己提供答案时,我犹豫使用我的欺骗锤单方面关闭问题。)
-
这与建议的问题略有不同。如果父母都收到相同的论点,我的会起作用。
标签: python python-2.7 inheritance multiple-inheritance multiple-arguments