2012-02-06 56 views
9

我试图从另一个模块导入一个类里面只是一个变量:导入从另一个模块类变量

import module.class.variable 
# ImportError: No module named class.variable 

from module.class import variable 
# ImportError: No module named class 

from module import class.variable 
# SyntaxError: invalid syntax (the . is highlighted) 

我可以做以下的,但我宁愿只导入一个变量我需要。

from module import class as tmp 
new_variable_name = tmp.variable 
del tmp 

这可能吗?

回答

10
variable = __import__('module').class.variable 
+0

我正确地认为这会导入整个模块吗?相当于'import module'然后'variable = module.class.variable'? – 2012-02-06 02:58:34

+7

除了它不会绑定任何名称到导入的模块。是好的;'从模块导入clazz'“导入整个模块”,*完全相同的方式*。没有办法解决这个问题;类定义不能保证没有任何意义,没有模块的其余部分上下文以及类的属性。 – 2012-02-06 03:00:22

+0

@Alex它将始终导入* whole *模块(但它取决于您的语句)*在脚本范围中可用的*)。 '从x1导入x2'将加载'x1',然后在'x2'的范围或子包中查找'x2'的位置。 – 2012-02-06 06:20:28

5

你不能做到这一点 - import语句只能带来从模块或子元素 - 类属性,虽然寻址与用于子模块接入同一个点语法,不能单独进口。

你可以做的是:

from mymodule import myclass 
myvar = myclass.myvar 
del myclass 

无论哪种方式,只要一个不使用from module import anything语法,整个模块读取和processed.The例外是

from module.submodule import submodule 

方案,其中如果子模块本身不需要整个模块,只有子模块被处理。

(所以,即便onmy上面的解决方法,mymodule被读取,并执行 - 在sys.modules字典是没有取得在全局命名空间,其中import语句是由访问,但将是可见的,其所有的组成部分,

+0

您的解决方法看起来非常类似于我的解决方法!感谢您的解释 – 2012-02-06 03:27:42