Я меняю некоторые свои классы с широкого использования геттеров и сеттеров на более питоническое использование свойств.
Но теперь я застрял, потому что некоторые из моих предыдущих методов получения или установки вызывали соответствующий метод базового класса, а затем выполняли что-то еще. Но как этого добиться с помощью свойств? Как вызвать метод получения или установки свойства в родительском классе?
Конечно, простой вызов атрибута дает бесконечную рекурсию.
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)
унаследованный сеттер? Почему бы и нетFoo.bar.fset(c)
- без «Я» - я думал, это неявно прошло?