なぜそれをしたいのかわかりませんが、property
デコレータを使用する1つの方法があります:
class Foo(object):
@property
def x(self):
print "x was called"
return lambda: None
しかし、これはまったくナンセンスです。あなたの例がやろうとしていることを達成しますがFoo().x
、ラムダ関数にアクセスすると、それ以外の場合は役に立たないものが返されます。
カスタム クラスのインスタンスを返すことに問題がない場合は、そのカスタム クラスに、__call__()
単純に返されるメソッドを指定して、もう少し意味self
を持たせることもできます。.x()
class XReturnValue(object):
def __call__(self):
return self
class Foo(object):
@property
def x(self):
print "x was called"
return XReturnValue()
XReturnValue
のユーザーにとって実際に何かを意味するように、さらに肉付けすることができますFoo.x
。
ただし、Python の呼び出し可能オブジェクト (関数やメソッドなど) は、それ自体がオブジェクトです。それらを操作したり、それらに属性を追加したり、後で使用するために別の変数に割り当てたりすることができます。結果を取得するには、それらを呼び出しますが、それらを呼び出さない場合は、その参照を取得して他の場所で再利用できます。それを回避しようとしてはいけません。
.x
つまり、属性、 、またはメソッドであることに固執しますproperty
が、すべてを一度にしようとしないでください。