0

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

0 回答 0