子类 - 继承自父类的参数

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)

1
请注意,“需要恰好1个参数”可能会让人感到困惑,因为这个参数是“self”(它会自动传递)。 - Katriel
1个回答

33

没有什么神奇的事情发生! __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)。它不会神奇地尝试将一些参数匹配到超类,一些参数匹配到子类。

2
最近更多地使用 super().__init__(args, go, here),因此它非常容易。 - eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接