Estoy cambiando algunas clases mías de un uso extensivo de captadores y definidores a un uso más pitónico de propiedades.
Pero ahora estoy atascado porque algunos de mis getters o setters anteriores llamaban al método correspondiente de la clase base y luego realizaban otra cosa. Pero, ¿cómo se puede lograr esto con propiedades? ¿Cómo llamar al getter o setter de propiedad en la clase principal?
Por supuesto, simplemente llamar al atributo en sí da una recursividad 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)
a un setter heredado? ¿Por qué noFoo.bar.fset(c)
, sin el "yo", pensé que esto se pasa implícitamente?