1
让我们假设我们有一个具有只能异步设置的属性的类。有没有一种方法可以在不明确调用setter的情况下进行这项工作?异步属性设置器
MNWE:
import asyncio
loop = asyncio.get_event_loop()
class AsyncTest:
def __init__(self, attrib):
self._attrib = attrib
@property
def attrib(self):
return self._attrib
@attrib.setter
async def set_attrib(self, attrib):
await asyncio.sleep(1.0)
self._attrib = attrib
async def main():
t = AsyncTest(1)
print(t.attrib)
await t.attrib = 3
print(t.attrib)
asyncio.ensure_future(main())
loop.run_forever()
这种失败
File "asyncprop.py", line 22
await t.attrib = 3
^
SyntaxError: can't assign to await expression
这并不奇怪,因为对于await
语法是
await ::= ["await"] primary
如此看来,我们一定会忘记这个不错的@property
并且决定使用getters和setter用于异步操作。我错过了什么?
@Evpok:可能有一种方法来创建自己的'async_property'描述符。 –
是的,但它仍然只能通过'setattr'工作,这种做法会破坏财产的目的。 – Evpok
@Evpok:是的,直到异步分配被添加到您限制使用'setattr()'的语言。我怀疑是否会有这样的特性(对本地或全球甚至意味着什么异步分配)? –