此问题与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