我有以下设置。我正在尝试动态加载a.py中的模块(在本例中来自c.py,并将其称为toBeLoaded)。然后我想导入另一个模块fileB,它有一个将继承类toBeLoaded.anotherClass的类。我知道如果我在b.py中导入c.py会解决问题,但由于我动态加载c.py,我不知道如何实现。如果我可以在导入之前以某种方式将变量传递给b.py,它会起作用,但我不知道该怎么做。
这是我目前的设置。
a.py
import imp
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-c","--configFile",dest="configFile", default="c.py",help="")
(options, args) = parser.parse_args()
modulePath=options.configFile
toBeLoaded = imp.load_source('toBeLoaded',modulePath)
import b
b.py
class TestClass(toBeLoaded.anotherClass):
def __init__(self):
print self.x
#do stuff here
c.py
class anotherClass():
def __init__(self):
self.x=5
我收到以下错误:
Traceback (most recent call last):
File "a.py", line 6, in <module>
import b
File "/test/b.py", line 1, in <module>
class TestClass(toBeLoaded.anotherClass):
NameError: name 'toBeLoaded' is not defined
答案 0 :(得分:0)
正如我所说,我很确定你不能这样做,即使你找到了一种不应该这样做的方法。
您应该考虑以其他方式组织代码,而不是通过导入内部抓取自己。 :)
编辑:由于您的目标似乎是加载配置文件,我建议:
答案 1 :(得分:0)
不确定这是否是最干净的方法。但是如果将c.py更改为
,问题就解决了c.py
from __main__ import modulePath
import imp
toBeLoaded = imp.load_source('toBeLoaded',modulePath)
class TestClass(toBeLoaded.anotherClass):
def __init__(self):
print self.x
#do stuff here