【发布时间】:2020-06-17 07:48:28
【问题描述】:
我创建的“最小”示例:
class C:
def wave(self):
print("C waves")
class A:
def __init__(self):
c = C()
setattr(self, 'wave', getattr(c, 'wave'))
class B(A):
def wave(self):
print("B waves")
>>> a = A()
>>> a.wave()
C waves # as expected
>>> b = B()
>>> b.wave()
C waves # why not 'B waves'?
>>>
在示例中,A 类将其方法wave 显式定义为C 类的wave 方法,虽然不是通过更常见的函数定义,而是使用setattr 代替。然后我们有继承A 的类B,B 尝试用自己的方法覆盖wave 方法,但是,这是不可能的,这是怎么回事?我该如何解决?
如果可能的话,我想保留班级A 的setattr 样式定义,请告知。
我从来没有系统地学习过 Python,所以我想我对 Python 的继承和 setattr 的工作原理有一些了解。
【问题讨论】:
标签: python inheritance setattr