Questa domanda è simile a this other one, con la differenza che il membro dati nella classe base è non avvolto dal protocollo descrittore.Come chiamare un membro dati della classe base se viene sovrascritto come una proprietà nella classe derivata?
In altre parole, come posso accedere a un membro della classe base se sto sovrascrivendo il suo nome con una proprietà nella classe derivata?
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
prega di notare che ho anche bisogno di definire un setter perché altrimenti l'assegnazione di self.foo nella classe base non funziona.
Tutto sommato il protocollo descrittore non sembra di interagire bene con l'eredità ...
Tutte le risposte sono molto interessanti e mi upvoted la maggior parte di loro, ma questo era dritto al il punto, mi ha davvero fatto capire il problema a portata di mano. – UncleZeiv