
import asyncio class A: data = [1, 2, 3] async def test(self): for i in self.data: yield i class B(A): flag = True async def test(self): if self.flag: # 怎么直接返回父类的 test 并打印 1 2 3 yield super(B, self).test() else: pass async def run(self): async for i in self.test(): # 打印不是 1 2 3 而是 async_generator print(i) asyncio.run(B().run()) 1 ipwx 2021-12-29 11:29:39 +08:00 yield from |
2 ipwx 2021-12-29 11:31:08 +08:00 好吧 async 不能 yield from 老老实实 async for ... in super().... yield |
3 chashao 2021-12-29 14:04:31 +08:00 这样不知道对不对。。 class A: data = [1, 2, 3] async def test(self): for i in self.data: yield i class B(A): flag = True def test(self): if self.flag: # 怎么直接返回父类的 test 并打印 1 2 3 return super(B, self).test() else: pass async def run(self): async for i in self.test(): # 打印不是 1 2 3 而是 async_generator print(i) asyncio.run(B().run()) |
4 shyrock 2021-12-29 14:35:08 +08:00 async for 的功能是迭代一个异步可迭代对象。 你写 async for i in self.test():就是迭代 B.test()。B.test()返回的是父类的一个异步生成器。所以迭代结果就是打印这个异步生成器对象了。 如果你要迭代 A.test()的内容,改成这样就可以: async for i in super(B, self).test(): print(i) |