Я не согласен с тем, что выбранный ответ является идеальным способом, позволяющим переопределить методы свойства. Если вы ожидаете, что геттеры и сеттеры будут переопределены, тогда вы можете использовать лямбду, чтобы обеспечить доступ к себе с чем-то вроде lambda self: self.<property func>
.
Это работает (по крайней мере) для Python версий от 2.4 до 3.6.
Если кто-нибудь знает способ сделать это, используя свойство как декоратор, а не как прямой вызов свойства (), я бы хотел услышать это!
Пример:
class Foo(object):
def _get_meow(self):
return self._meow + ' from a Foo'
def _set_meow(self, value):
self._meow = value
meow = property(fget=lambda self: self._get_meow(),
fset=lambda self, value: self._set_meow(value))
Таким образом можно легко выполнить переопределение:
class Bar(Foo):
def _get_meow(self):
return super(Bar, self)._get_meow() + ', altered by a Bar'
так что:
>>> foo = Foo()
>>> bar = Bar()
>>> foo.meow, bar.meow = "meow", "meow"
>>> foo.meow
"meow from a Foo"
>>> bar.meow
"meow from a Foo, altered by a Bar"
Я обнаружил это на выродке в игре .