我有一個使用領域的基礎類:如何用派生類中的屬性重寫基類中的字段?
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