我知道方法只是可以通过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)