For循环遍历class

For loop through class

import v1.bot.main
import v2.bot.main

for i in ['v1', 'v2]:
    # I want the for loop to do something like i.bot.main()
    
    # Like
    # v1.bot.main()
    # v2.bot.main()

这样可以吗?想去掉vX的写法,想放到for循环中。

最简单的方法是将 bot 的所有版本实例添加到字典中,例如:

global_bot_list = {1 : v1.bot(), 2: v2.bot()}

然后像这样做一个for循环:

for bot in global_bot_list.items():
     bot.main()

如果你想让代码完成工作,你可能应该为你的所有机器人创建一个抽象基础 class 以继承它具有 main 方法并更改 [=13= 的签名] 至:global_bot_list: Dict[int, BotBase] 其中 BotBase 是您选择的新基地名称 class.

顺便说一句,为了让它工作,你需要向每个机器人添加一个 __init__ 方法 class 并且 main 需要是一个具有 self作为它的第一个参数。

as 关键字很重要,因为 import 语句 returns 是 <class 'module'> 类型的对象。您将通过 module 对象调用 main() 函数。

import v1.bot.main as v1
import v2.bot.main as v2

for i in ["v1", "v2"]:
    eval(f"{i}.main()")