6

我对python有点陌生,但我有一个关于二级继承的问题。

我有这种情况:

class A:
  def Something(self):
     #Do Stuff

class B(A):
  def SomethingElse(self):
     #Do other stuff

class C(B):
  def Something(self):
     #Do additional stuff

请注意,C 类继承自 B,而 B 继承自 A,但 B 类没有实现方法 Something()。

如果我为 C 类的实例调用 super(C, self).Something(),会发生什么?它会调用A类的方法吗?

另外,如果B类确实实现了Something(),但我想直接从C类调用A类的Something()(即绕过B类的实现),我该怎么做?

最后,有人可以向我解释为什么人们使用 super() 而不是直接调用父类的方法吗?谢谢。

4

2 回答 2

11

在第一种情况下,B 没有实现Something,调用super将落到它定义的地方,即A

在第二种情况下,您可以通过调用绕过A.Something(self)B。

使用的主要原因super是用于多重继承的情况:Python 将始终调用 MRO 中的下一个定义(方法解析顺序)。

请参阅 Raymond Hettinger 的优秀文章Super被认为是超级!.

于 2013-06-24T13:03:34.823 回答
5
  1. 是的,它会Something()A课堂上调用。
  2. 您可以随时A.Something(self)C.

解释super()和其他调用约定需要一段时间。看看关于MROPython 的 Super 的原始文章很漂亮,但你不能使用它

于 2013-06-24T13:01:55.763 回答