2013-06-24 62 views
3

我对Python有点新,但是我有关于第二级继承的问题。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从A继承继承,但B类未实现方法的东西()。

如果我为C类的一个实例调用super(C,self).Something(),会发生什么?它会调用A类的方法吗?如果B类确实实现了实现Something(),但我想直接从类C调用类A(Something())(即绕过类B的实现),那我该怎么做呢?

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

回答

6

在第一种情况下,如果B不执行Something,则调用super将落在它定义的位置,即A

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

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

请参阅Raymond Hettinger的优秀文章Super considered super!