如何在Python 2.7中使用带有参数的super()?

How to use super() with arguments in Python 2.7?

本问题已经有最佳答案,请猛点这里访问。

我之所以问这个问题,是因为我在谷歌上搜索过的每一个页面,似乎都变成了过于简单的案例,或者是关于超出范围的细节的随机讨论。

1
2
3
4
5
6
7
8
9
10
11
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,但我不知道这意味着什么,谷歌也没有帮助。

我只想让它工作。在Python2.7中,正确的做法是什么?


您的基类必须继承自object(新样式类),对super的调用应该是super(Child, self)

你也不应该把arg5传给Base__init__

1
2
3
4
5
6
7
8
9
10
11
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