我不同意选择的答案是允许覆盖属性方法的理想方式。如果您希望 getter 和 setter 被覆盖,那么您可以使用 lambda 提供对 self 的访问,例如lambda self: self.<property func>
.
这(至少)适用于 Python 2.4 到 3.6 版本。
如果有人知道如何通过使用属性作为装饰器而不是直接调用 property() 来做到这一点,我想听听!
例子:
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"
我在geek at play上发现了这一点。