Sto cambiando alcune mie classi da un uso estensivo di getter e setter a un uso più pitonico delle proprietà.
Ma ora sono bloccato perché alcuni dei miei precedenti getter o setter chiamavano il metodo corrispondente della classe base e quindi eseguivano qualcos'altro. Ma come si può ottenere questo risultato con le proprietà? Come chiamare la proprietà getter o setter nella classe genitore?
Ovviamente la semplice chiamata dell'attributo stesso fornisce una ricorsione infinita.
class Foo(object):
@property
def bar(self):
return 5
@bar.setter
def bar(self, a):
print a
class FooBar(Foo):
@property
def bar(self):
# return the same value
# as in the base class
return self.bar # --> recursion!
@bar.setter
def bar(self, c):
# perform the same action
# as in the base class
self.bar = c # --> recursion!
# then do something else
print 'something else'
fb = FooBar()
fb.bar = 7
Foo.bar.fset(self, c)
un setter ereditato? Perché noFoo.bar.fset(c)
- senza il "sé" - pensavo che questo fosse implicitamente passato?