gpt4 book ai didi

python - 使用 __init__.py 加载动态 python 模块时出现问题

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

我正在尝试执行一个 __init__.py 来加载模块并实例化动态内部同名类。使用像这样的文件树

 importer/
__init__.py # The file i'm writing
asd.py # It contains class asd
bsd.py # It contains class bsd

__init__.py 以及

importername=__name__

def load(modname,paramlist = []):

if modname in globals():
print 'Module %s already loaded.' % (modname)
else:
imported_mod = __import__(importername + '.' + modname, fromlist = ["*"])
try:
globals()[modname]=getattr(imported_mod,modname)(*paramlist)
except Exception, e:
print 'Module %s not loaded: %s.' % (modname, e)

如果我运行

import importer
importer.load('asd')
print importer.asd.name
'ASD!'

它就像一个魅力,但如果我跑

from importer import *
load('asd')
print asd.name
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'asd' is not defined

我可以通过某种方式修复它吗?谢谢。

最佳答案

Python 中不存在真正的全局性。当您在 importer/__init__.py 中使用 globals() 时,您正在访问模块的 namespace 。您的第二个非工作示例是将“asd”添加到导入器,而不是您的测试模块。

你能做的最好的就是修改导入器,这样你就可以这样做:

from importer import *
asd = load('asd')
print asd.name

但正如 Thomas K 所说:这有点奇怪,也许有更简单的方法来解决您的问题?

关于python - 使用 __init__.py 加载动态 python 模块时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956657/

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