メソッドは、 経由でアクセスできる単なるオブジェクトであることは承知していますgetattr(obj, 'method_name')
。メソッドが存在しない場合、これがトリガーされobj.__getattr__(method_name)
ます。ただし、__getattr__
属性がユーザーによって直接呼び出されるかどうかを実装で区別することは可能ですか? 記述子がこれを許可する可能性があるように思えますが、完全にはわかりません。
私の動機は、通信が遅いラップされたオブジェクトに属性アクセスとメソッド呼び出しの両方を転送するプロキシ クラスです。属性アクセスの場合、必然的にブロックして結果を待つ必要があります。_blocking
しかし、メソッド アクセスの場合は、ノンブロッキング プロミス オブジェクトを受け取ることができるパラメーターを挿入したいと思います。
proxy = Proxy(Inner())
proxy.value # Block and wait for inner.value
promise = proxy.method(arg1, args2, _blocking=False) # Non-blocking
promise() # Wait for the return value of inner.method(arg1, arg2)