通过字符串和模块名调用函数

0 投票
1 回答
576 浏览
提问于 2025-04-17 13:49

可能重复的问题:
如何动态加载一个Python类

我现在正在使用一个“while”循环来自动更新存储在数据库中的游戏。这个“while”循环会一直运行,直到达到游戏的数量。每次循环都会返回一行数据,包含所有游戏的信息(比如版本、更新链接等)。

现在我在一个名为“Scripts”的子目录下为每个游戏创建了脚本。像这样:

MainScript.py
  --> Scripts
       --> Game1.py
       --> Game2.py
       --> Game3.py

现在,MainScript会在连接到数据库并获取游戏名称后,逐个调用所有游戏的脚本。

但问题是,数据库中存储的游戏名称是一个字符串,而每个Game1.py、Game2.py、Game3.py中的函数名称和游戏名称是一样的。

这就意味着,当我尝试调用某个游戏的函数,比如“Minecraft”,它的调用方式应该是这样的:

Scripts.Minecraft.Minecraft(version, size, download)

现在,我的问题是如何动态地做到这一点。因为在while循环中,每次循环时名称部分都会变化。我该如何动态地处理这个问题呢?

Scripts.<GameName>.<GameName>(version, size, download)

它总是把变量当作字面意思来处理,并说无法使用它。我该如何在调用函数时使用变量呢?

1 个回答

3

试试用 getattr 这个函数。例如,如果游戏的名字保存在 gamename 这个变量里:

getattr(getattr(Scripts, gamename), gamename)(version, size, download)

这样应该可以正常工作。

撰写回答