我有一个使用领域的基础类:如何用派生类中的属性重写基类中的字段?
class Base(object):
def __init__(self, member):
self.member = member
而且派生类中,就是想推动这一个属性,并添加一些行为:
class Derived(Base):
@property
def member(self):
return super(Derived, self).member
@member.setter
def member(self, value):
print "intercepting setter"
super(Derived, self).member = value
然而,这并未” t正确地委托给基类:
>>> d = Derived(0)
intercepting setter
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
d = Derived(0)
File "<pyshell#3>", line 3, in __init__
self.member = 2
File "<pyshell#6>", line 9, in member
super(Derived, self).member = value
AttributeError: 'super' object has no attribute 'member'
我应该怎么做?
我刚刚明白你的答案就是我在答案中的结果。 – Alfe
_“好像它是一个类属性”_ - 不会显示为'super(Derived).member'? – Eric
不,使用'super'不会让你访问'Base'的一个假设的'member'属性(你需要一个绑定的超类对象,提供一个像这样的实例:'super(Derived,self) .member')。无论如何,在你的代码中,'member'是构造函数初始化的一个**实例属性**,'super'用于从基类访问东西,而不是来自类实例的东西。 – Chewie