从基类调用重写的方法?

2024-04-30

深入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(使用前将#替换为@)

从基类调用重写的方法? 的相关文章

随机推荐