异步Python -如何使类__init__在类__init__中运行异步函数

kxkpmulp  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(253)

假设我有这样一个:

class Test():
    def __init__(self, number):
        self.number = number
        await self.TestPrint()

    async def TestPrint(self):
        print(self.number)

正如您所看到的,这是行不通的,因为__init__不是async,我不能为函数调用await
我希望能够在__init__内运行TestPrint,假设我希望保持此函数异步
我还希望这与类之外的任何其他东西都没有关系(其他函数、其他类、main等)。

oxcyiej7

oxcyiej71#

就像评论中提到的chepner
创建对象,然后在返回TestPrint方法之前调用它的异步类方法听起来更合适。
这是最好的方法,也是为什么有很多函数初始化内部异步类,而不是直接示例化它们。
也就是说,如果你想在类中使用@classmethod,它可以是异步的,你的代码应该是这样的:

class Test():
    def __init__(self, number):
        self.number = number

    async def TestPrint(self):
            print(self.number)

    @classmethod
    async def with_print(cls, number):
        self = cls(number)
        await self.TestPrint()
        return self
async def main():
    t = await Test.with_print(123)
    # 't' is now your Test instance.
    ...

相关问题