我是 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() 而不是直接调用父类的方法吗?谢谢。
最佳答案
第一种情况,B没有实现Something
,调用super
会落到定义的地方,即A
.
在第二种情况下,您可以通过调用 A.Something(self)
来绕过 B。
使用 super
的主要原因是针对那些具有多重继承的情况:Python 将始终调用 MRO(方法解析顺序)中的下一个定义。
参见 Raymond Hettinger 的优秀文章 Super considered super! .
关于Python二级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17276072/