导入前将变量传递给模块

时间:2016-11-29 23:14:00

标签: python import module

我有以下设置。我正在尝试动态加载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

2 个答案:

答案 0 :(得分:0)

正如我所说,我很确定你不能这样做,即使你找到了一种不应该这样做的方法。

您应该考虑以其他方式组织代码,而不是通过导入内部抓取自己。 :)

编辑:由于您的目标似乎是加载配置文件,我建议:

  1. 使用基本数据类型而不是外部类引用
  2. 查看configparser
  3. 使用json

答案 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