通过字符串和模块名调用函数
可能重复的问题:
如何动态加载一个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)
这样应该可以正常工作。