python - Python 继承的类行为
问题描述
我有一个关于 python 继承类方法的问题,在下面的代码中。
class B(object):
def test(self):
self.call()
def call(self):
print("Call from B")
if __name__ == "__main__":
b = B()
b.test()
from b import B
class C(B):
def call(self):
print("Call from C")
if __name__ == "__main__":
c = C()
c.test()
当我运行这段代码时,结果是
Call from C
父类方法会调用子类方法。我想知道这是否是预期和稳定的行为?因为我也在 C++ 中尝试了相同的逻辑,所以它会打印
Call from B
解决方案
是的,这是意料之中的。c
是 的实例C
,但由于C.test
未定义,因此c.test
解析为B.test
。但是,相应的调用self.call()
调用,C.call
因为运行时类型self
is C
、 notB
和C.call
已定义。将所有 Python 方法视为虚拟方法。
推荐阅读
- html - 如何使用 CSS 移动带有 PHP 内容的 HTML div
- python - 如何修复引号内的引号 XML
- python-3.x - 如何使用aoihttp为Python3中的每个异步方法调用传递不同的参数?
- c# - 使用 C# 和 ASP.Net 与 Rider 和 Visual Studio 的 Git 问题
- gitlab - 需要 gitLab-runner 的建议以进行持续部署
- watermark - Catia, CREO 水印
- python - 读取 JSON 文件并更改其中的内容
- java - 如何在 for 循环中添加鼠标侦听器
- mechanize - 获取 Mechanize::UnauthorizedError: 401 => Net::HTTPUnauthorized 使用基本身份验证访问 API 时
- shell - 如果脚本抛出错误,则退出 shell 脚本