【问题标题】:Subclass - Arguments From Superclass子类 - 来自超类的参数
【发布时间】:2012-04-08 01:43:33
【问题描述】:

我对如何在 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(包括 self)。

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

【问题讨论】:

  • 请注意,takes exactly 1 argument 可能会造成混淆,因为该参数是 self(自动传递)。

标签: python inheritance


【解决方案1】:

没有魔法发生! __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)。它不会神奇地尝试将一些参数匹配到超类和一些子类。

【讨论】:

  • 最近,super().__init__(args, go, here) 所以它超级简单
猜你喜欢
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多