gpt4 book ai didi

python - 从 python 文件中返回类的实例

转载 作者:行者123 更新时间:2023-12-01 06:18:00 25 4
gpt4 key购买 nike

在我的程序中,我有一个包含各种 .py 文件的包,每个文件都包含一个类定义。我想创建一个列表,其中每个条目都是这些类之一的实例。此外,我的程序不知道包中有多少个文件,也不知道这些文件或类的名称是什么,所以我不能只导入每个文件。理想情况下,我应该能够修改包的内容(取出文件、放入新文件等),而不必重写程序的其他部分。有办法做到这一点吗?

最初,我在每个文件中有一个 'if __name__ == '__main__': return foo()' 行,并尝试使用 execfile() 附加到列表,但显然这不起作用。有什么想法吗?

抱歉,如果这有点含糊。如果需要的话我会尽力澄清。我使用的是 Python 2.5.4。

编辑:

我的程序是龙与地下城的随机角色生成器。我为程序所需的每种主要数据类型制作了一个包。我有一个用于类、种族、元素等的包,在创建角色时,我的程序会列出每种数据类型的列表,在创建角色时可以对这些数据类型进行排序。例如,当装备一个角色时,程序可以查看武器列表并过滤掉所有不适合该角色的武器,然后从剩下的武器中随机选择。

我不想指定文件名,因为我希望以后能够轻松添加到此程序。如果以后我想向程序添加更多武器类型,我只需编写一些新的类描述并将它们放入武器包中,程序就可以使用它们,而无需我编辑任何其他代码。

最佳答案

这听起来有点糟糕的设计。如果您详细说明问题可能会更好,我们可以帮助您以其他方式解决它。然而,你想要的并不难:

import types
import my_package

my_package_members = [getattr(my_package, i) for i in dir(my_package)]
my_modules = [i for i in my_package_members if type(i) == types.ModuleType]

instances = []

for my_module in my_modules:
my_module_members = [getattr(my_module, i) for i in dir(my_module)]
my_classes = [i for i in my_module_members
if type(i) in (types.TypeType, types.ClassType)]
for my_class in my_classes:
instances.append(my_class())

编辑:稍微简化了代码。

关于python - 从 python 文件中返回类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2151499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com