This question is similar to this other one, with the difference that the data member in the base class is not wrapped by the descriptor protocol.
In other words, how can I access a member of the base class if I am overriding its name with a property in the derived class?
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
Please note that I also need to define a setter because otherwise the assignment of self.foo in the base class doesn't work.
All in all the descriptor protocol doesn't seem to interact well with inheritance...