是否可以在__getattr__中确定是否访问了属性或方法?

时间:2017-10-16 15:14:19

标签: python multiprocessing descriptor getattr proxy-pattern

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

0 个答案:

没有答案