我試圖做一個__init__.py
加載模塊並實例化dinamically內部同名類。有了這樣使用__init__.py加載動態python模塊的問題
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中被認爲是不好的做法。你真的想要這樣做?可能有更好的方法。 – 2011-05-10 21:37:32
看看我在Ned答案中的評論。 – Emilio 2011-05-10 22:08:46