Python二级继承

标签 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() 而不是直接调用父类的方法吗?谢谢。

最佳答案

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

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

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

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

关于Python二级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17276072/

相关文章:

python - 尽管生成了 django.po,Django {%trans%} 仍不工作

c++ - 覆盖 [[noreturn]] 虚函数

ios - 从初始化程序返回之前,不会在所有路径上调用“super.init”

java - Java中InterruptibleChannel接口(interface)扩展Channel接口(interface)的目的是什么?

python - python中的&是什么意思

python - 在 Pandas 中映射

python - 在所有测试中修补多个模块变量

python - 如何为不可变类型实现 "__iadd__()"?

java - Java中如何为继承字段赋值?

.net - 从界面或基础继承注释