可能重复:
Why do I have to specify my own class when using super(), and is there a way to get around it?
我正在读这本书 - "Core Python Programming"
,我真的觉得这很好。但是当我在研究主题继承时,我对此感到困惑。
这本书说 - 我们可以使用super()
来调用super class method
,它将为我们找到基类方法,而且我们也不需要明确地传递self
,就像我们没有超级..
以下是示例代码: -
# Invoking super class method without super() .. Need to pass `self` as argument
class Child(Parent):
def foo(self):
Parent.foo(self)
# Invoking with super().
# No need to pass `self` as argument to foo()
class Child(Parent1, Parent2):
def foo(self):
super(Child, self).foo()
print 'Hi, I am Child-foo()'
我的问题是 - 为什么我们必须将classname
传递给super()
调用..因为类名可以从调用super的类中推断出来。
所以,因为调用了super()
class Child
,classname应该隐含在那里..那么为什么我们需要那个?
*编辑: - 将Child
作为参数提供给super()没有意义,因为它没有提供任何信息..我们可以使用super(self)
..而且方法将按照在括号内给出的顺序在超类中搜索..
答案 0 :(得分:4)
通过提供类名作为第一个参数,您可以提供冗余信息。是。这有点愚蠢*这就是为什么在Python 3中改变了super
的行为。
*我的答案实际上与John Carter的答案相矛盾。当然,我们中只有一个是对的。我不想冒犯他和其他人,我很高兴看到一个有意义的例子super(C, self).method(arg)
实际上没有在班级C
中使用: - )。