我是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()而不是直接调用父类的方法?感谢。
答案 0 :(得分:8)
在第一种情况下,B未实施Something
,调用super
将会定位到定义它的位置,即A
。
在第二种情况下,您可以通过拨打A.Something(self)
来绕过B。
使用super
的主要原因是那些具有多重继承的情况:Python将始终调用MRO中的下一个定义(方法解析顺序)。
见Raymond Hettinger的优秀文章Super considered super!。
答案 1 :(得分:4)
Something()
班级致电A
。A.Something(self)
致电C
。 super()
和其他调用约定的解释需要一段时间。请查看有关MRO和Python's Super is nifty, but you can't use it。