Rex*_*unt 8 python inheritance
我正在阅读关于类的Python文档,并且遇到了我不确定的这一段:
派生类可以覆盖其基类的方法.因为方法在调用同一对象的其他方法时没有特殊权限,所以调用同一基类中定义的另一个方法的基类方法最终可能会调用覆盖它的派生类的方法.(对于C++程序员:Python中的所有方法都是虚拟的.)
例:
class A:
def foo(self):
self.bar()
def bar(self):
print "from A"
class B(A):
def foo(self):
self.bar()
def bar(self):
print "from B"
Run Code Online (Sandbox Code Playgroud)
这是否意味着A类对象obj = A()可以某种方式最终"从B"打印?我读得对吗?如果这没有意义,我道歉.关于python如何处理继承和覆盖,我有点困惑.谢谢!
没有.超类无法知道关于子类的任何信息.这意味着如果你实例化子类B,并且它继承了一个方法foo(),并覆盖了一个方法bar(),那么当你调用foo()时,它将调用bar()B中的bar()定义,而不是A中的定义.这不是超类作者的意图 -他希望他的呼吁能够bar()达到他自己的定义.