Python二级继承

Mig*_*ell 5 python inheritance

我是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
Run Code Online (Sandbox Code Playgroud)

请注意,C类继承自B的B继承自A,但B类不实现Something()方法.

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

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

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

Dan*_*man 10

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

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

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

请参阅Raymond Hettinger的优秀文章超级考虑超级!.


vir*_*tor 5

  1. 是的,它会Something()A班级中调用。
  2. 您可以随时A.Something(self)从调用C

super()和其他调用约定的解释需要一段时间。看一下关于MRO的原始文章,Python的Super is nifty, but you can't use it