Estou mudando algumas classes minhas de um uso extensivo de getters e setters para um uso mais pythônico de propriedades.
Mas agora estou preso porque alguns dos meus getters ou setters anteriores chamariam o método correspondente da classe base e, em seguida, executariam outra coisa. Mas como isso pode ser feito com propriedades? Como chamar a propriedade getter ou setter na classe pai?
É claro que apenas chamar o próprio atributo dá recursão 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)
um setter herdado? Por que nãoFoo.bar.fset(c)
- sem o "eu" - pensei que isso fosse implicitamente passado?