首页 > 解决方案 > 一个基类的方法调用同一个基类中定义的另一个方法,最终可能会调用一个派生类的方法来覆盖它

问题描述

我正在阅读 python 文档:https ://docs.python.org/3/tutorial/classes.html

我无法理解以下内容:

因为方法在调用同一对象的其他方法时没有特殊权限,所以基类的方法调用同一基类中定义的另一个方法可能最终会调用覆盖它的派生类的方法。(对于 C++ 程序员:Python 中的所有方法实际上都是虚拟的。)

假设基类 X 具有调用同一基类中的方法 B 的方法 A。

现在派生类 Y,比如说有方法 B,并且用户调用 YA()。那么,X 类的方法 A 会被调用,它会调用 Y 类的方法 B?这是作者想说的吗?

标签: pythonpython-3.x

解决方案


我认为这就是他的意思

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它调用它而不是barA 类

如果您可以访问像 pycharm 这样的调试器,那么一步一步地遵循它会更容易


推荐阅读