gpt4 book ai didi

python - 使用 __import__ 从同名模块导入对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:36 27 4
gpt4 key购买 nike

我的目录结构如下:

root/
__main__.py
files/
__init__.py
foo.py
bar.py
baz.py

每个文件中都有一个与该文件同名的对象。您可以想象 foo = MyObj(1) 行位于 foo.py 中,而 bar = MyObj(2) 位于 bar.py 中,等等。

为了从 root/files/ 中的每个文件导入同名对象,我在 root/files/__init__.py 中有以下代码:

all_objects = []
#assume file_list is populated with list of files in root/files/
for file_name in file_list:
mod_name = file_name[:-3] #chop off the '.py'
obj_name = file_name[:-3] #remember, object I want has same name as module
obj = __import__(mod_name, globals=globals(), locals=locals(), fromlist=(obj_name), level=1)
all_objects.append(obj)

这里,obj 保存模块 foo、bar、...等,并且不是这些模块中包含的对象。

问题:

如何更改我的 __import__ 调用,使其返回模块中包含的对象而不是模块本身?

解决方法:

我发现可以使用 getattr(obj, obj_name) 来提取我想要的对象。

最佳答案

您需要调用相当于:

obj = __import__("mymod", ...).mymod

重现

from mymod import mymod

通过名称获取对象的属性可以使用

getattr(obj, 'mymod')
# or
obj.__dict__['mymod']
# or
vars(obj)['mymod']

选择一个。 (如果确实需要,我会选择 getattr)。

obj = getattr(__import__(mod_name, globals=globals(), locals=locals(), fromlist=(obj_name), level=1), mod_name)

关于python - 使用 __import__ 从同名模块导入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068002/

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