Я міняю деякі мої класи від широкого використання геттерів та сеттерів до більш пітонічного використання властивостей.
Але зараз я застряг, тому що деякі з моїх попередніх геттерів або установників викликали б відповідний метод базового класу, а потім виконували щось інше. Але як цього можна досягти за допомогою властивостей? Як викликати властивість getter або setter у батьківському класі?
Звичайно, просто виклик самого атрибута дає нескінченну рекурсію.
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)
- без "я" - я думав, це беззаперечно пройдено?