Python的原作者Guido解释了以这种方式覆盖的方法:“派生类可能会覆盖其基类的方法 . 因为方法在调用同一对象的其他方法时没有特殊权限,所以基类的方法调用另一个方法在同一个基类中定义的方法实际上最终可能会调用覆盖它的派生类的方法 . (对于C程序员:Python中的所有方法都是虚拟的 . )“如果这对你没有意义(它混淆了我的地狱),随意忽略它 . 我以为我会把它传递给我 .
我试图找出一个例子:一个基类的方法调用在同一个基类中定义的另一个方法,实际上可能最终调用一个派生类的方法来覆盖它
class A:
def foo(self): print 'A.foo'
def bar(self): self.foo()
class B(A):
def foo(self): print 'B.foo'
if __name__ == '__main__':
a = A()
a.bar() # echoes A.foo
b = B()
b.bar() # echoes B.foo
......但这两者似乎都很明显 .
我错过了引用中暗示的内容吗?
更新
编辑在原始代码中调用 a.foo()
(而不是 a.bar()
)和 b.foo()
(而不是 b.bar()
)的拼写错误
1 回答
是的,你错过了这个:
B
没有自己的bar
方法,只是从A
继承的方法 .A
的bar
调用self.foo
,但在B
的实例中最终调用B
的foo
,而不是A
的foo
.让我们再看看你的报价:
要翻译: