为什么在Python中使用super()时必须提供classname

Roh*_*ain 7 python python-2.7

可能重复:
为什么我在使用super()时必须指定自己的类,有没有办法解决它?

我正在读这本书 - "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()'
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 为什么我们必须传递classnamesuper()调用..因为类名可以从调用super的类中推断出来.

所以,由于调用了super() class Child,classname应该隐含在那里..那么为什么我们需要呢?

*编辑: - Child作为参数提供给super()是没有意义的,因为它没有提供任何信息..我们可以使用super(self)..并且该方法将按照它们的顺序在超类中搜索在括号内给出..

Jan*_*cke 5

通过提供类名作为第一个参数,您可以提供冗余信息。是。这有点愚蠢*,这就是为什么superPython 3中的行为发生了变化。

*我的回答实际上与约翰·卡特的回答相矛盾。当然,只有我们一个人是正确的。我不想得罪他和其他人,我很高兴看到一个有意义的例子,super(C, self).method(arg)在课堂上实际上没有使用它C:-)。

  • 你是对的,简。我撤回我最初的回答,无意冒犯。 (2认同)