8

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

我正在读这本书 - "Core Python Programming",我真的觉得它非常好,我想说。但是在研究继承主题时,我有一段时间感到困惑。

某处的书说-我们可以使用super()调用super class method它将为我们找到基类方法,而且我们不需要self显式传递,就像我们没有 super..

这是示例代码: -

# 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()'

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

所以,由于 super() 是从 调用的 class Child,类名应该是隐式的。那么为什么我们需要它呢?

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

4

1 回答 1

5

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

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

于 2012-09-25T13:46:21.963 回答