なぜそれをしたいのかわかりませんが、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が、すべてを一度にしようとしないでください。