深入Python http://diveintopython.net/object_oriented_framework/userdict.html -
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
...但这两者似乎都很明显。
我是否遗漏了引文中暗示的内容?
UPDATE
编辑了呼叫的拼写错误a.foo()
(代替a.bar()
)and b.foo()
(代替b.bar()
)在原始代码中
请注意,这不适用于 Python 3.6 中的私有方法:
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 A.foo, not B.foo
我花了一个小时找出原因
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)