python - 一个基类的方法调用同一个基类中定义的另一个方法,最终可能会调用一个派生类的方法来覆盖它
问题描述
我正在阅读 python 文档:https ://docs.python.org/3/tutorial/classes.html
我无法理解以下内容:
因为方法在调用同一对象的其他方法时没有特殊权限,所以基类的方法调用同一基类中定义的另一个方法可能最终会调用覆盖它的派生类的方法。(对于 C++ 程序员:Python 中的所有方法实际上都是虚拟的。)
假设基类 X 具有调用同一基类中的方法 B 的方法 A。
现在派生类 Y,比如说有方法 B,并且用户调用 YA()。那么,X 类的方法 A 会被调用,它会调用 Y 类的方法 B?这是作者想说的吗?
解决方案
我认为这就是他的意思
In [8]: class A:
...: def foo(self):
...: print ('foo')
...: self.bar()
...: def bar(self):
...: print ('bar')
...:
In [9]: class B(A):
...: def bar(self):
...: print('bar but in b')
...:
In [10]: obj = B()
In [11]: obj.foo()
foo
bar but in b
在第 11 行,obj.foo()foo
在 B 类中调用,因为它不存在,所以它转到 A 类中的 foo,然后调用bar
,因为 B 有bar
它调用它而不是bar
A 类
如果您可以访问像 pycharm 这样的调试器,那么一步一步地遵循它会更容易
推荐阅读
- javascript - 使用 Javascript 禁用表单按钮和字段
- android - Android 发送广播到其他模块
- ios - 如何替换/更新 Xcode 中的现有证书?
- java - 如何在电报机器人(JAVA)中下载文件
- flutter - Flutter - 单击设备后退按钮时如何将数据传递到第一个屏幕
- cordova - 不播放声音的离子本地通知
- php - Mac上的Nginx虚拟块指向localhost的index.php
- dictionary - 如何在 Flutter 中实现地图(不是谷歌地图)?
- perforce - Perforce:如何标记仓库中存在但工作区中不存在的删除文件?
- angular - Angular 表单组重新初始化