Python二级继承

时间:2013-06-24 12:57:05

标签: 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

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

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

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

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

2 个答案:

答案 0 :(得分:8)

在第一种情况下,B未实施Something,调用super将会定位到定义它的位置,即A

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

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

见Raymond Hettinger的优秀文章Super considered super!

答案 1 :(得分:4)

  1. 是的,它会从Something()班级致电A
  2. 您随时可以从A.Something(self)致电C
  3. super()和其他调用约定的解释需要一段时间。请查看有关MROPython's Super is nifty, but you can't use it

    的原始文章