gpt4 book ai didi

python - 异步属性 setter

转载 作者:太空狗 更新时间:2023-10-29 22:21:36 24 4
gpt4 key购买 nike

假设我们有一个类,其属性只能异步设置。有没有办法在不显式调用 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 并放弃使用 getter 和 setter 进行异步操作。我错过了什么吗?

最佳答案

您不能将一个语句嵌套在另一个语句中;赋值是一个语句,await也是。您可以使用 setattr() 在表达式中设置属性:

await setattr(t, 'attrib', 3)

但是,property 以不支持 async 方法(它们不可等待)的方式包装 setter,因此您最好还是使用显式 setter方法。

关于python - 异步属性 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36666151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com