Zmieniam niektóre z moich klas z szerokiego użycia metod pobierających i ustawiających na bardziej Pythonowe użycie właściwości.
Ale teraz utknąłem, ponieważ niektóre z moich poprzednich metod pobierających lub ustawiających wywoływałyby odpowiednią metodę klasy bazowej, a następnie wykonywałyby coś innego. Ale jak można to osiągnąć za pomocą właściwości? Jak wywołać metodę pobierającą lub ustawiającą właściwość w klasie nadrzędnej?
Oczywiście samo wywołanie atrybutu daje nieskończoną rekurencję.
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)
setera odziedziczonego? Dlaczego nieFoo.bar.fset(c)
- bez „ja” - myślałem, że to zostało w domyśle przekazane?