我知道方法只是可以通过getattr(obj, 'method_name')
访问的对象。该方法不存在,这将触发obj.__getattr__(method_name)
。但是,在__getattr__
实现中是否可以区分用户是否直接调用该属性?在我看来,描述符可能允许这样,但我不完全确定。
我的动机是一个代理类,它将属性访问和方法调用转发到通信速度较慢的包装对象。对于属性访问,我们必须阻止并等待结果。但是对于方法访问,我想注入一个允许接收非阻塞promise对象的_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)