此問題與this other one類似,不同之處在於基類中的數據成員是而不是由描述符協議包裝。如果基類的數據成員被覆蓋爲派生類中的屬性,如何調用它?
換句話說,如果我用派生類中的屬性重寫它的名稱,我該如何訪問基類的成員?
class Base(object):
def __init__(self):
self.foo = 5
class Derived(Base):
def __init__(self):
Base.__init__(self)
@property
def foo(self):
return 1 + self.foo # doesn't work of course!
@foo.setter
def foo(self, f):
self._foo = f
bar = Base()
print bar.foo
foobar = Derived()
print foobar.foo
請注意,我還需要定義一個setter,否則在基類中self.foo的賦值不起作用。
總而言之描述符協議似乎並沒有與繼承以及互動......
所有的答案都非常有趣,我upvoted大部分,但這次是直接到這一點,它真的讓我明白了手頭的問題。 – UncleZeiv 2009-06-30 09:57:01