您尝试执行的操作是不可能的(使用Python 3.5)。
虽然
__get__返回Future是明智的
__set__,但Python
3.5完全不支持进行异步。
__set__Python会忽略的返回值,因为没有赋值的“返回值”。且呼叫
__set__始终是同步的。就像您已经注意到的那样,
a= (b.c = 5)实际上会引发a
SyntaxError。
如果
await device.attr =5允许类似异步分配,那么异步描述符可能会有一个单独的协议,即协程,
__aget__并
__aset__作为类似于异步上下文管理器(
asyncwith/
__aenter__)和异步迭代(
async for/
__aiter__)的特殊方法。有关/支持背后的设计决策,请参见PEP
492。
async``await
还要注意,
__get__归还未来不会产生
__get__协程。
没有更多上下文,您似乎希望在描述符协议提供的属性访问抽象后面隐藏某些内容,最好将其明确地完成,但这当然取决于您。



