選択した答えが、プロパティ メソッドのオーバーライドを許可する理想的な方法であることに同意しません。ゲッターとセッターがオーバーライドされることが予想される場合は、ラムダを使用して、のようなもので自己へのアクセスを提供できます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で発見しました。