我有一个主文件(main.py):
execfile("library.py")
#import library : DOESN'T WORK
class c_config(object):
static_var=3
print(c_config.static_var) # Works both ways
obj=another()
print(obj.dynamic) # Works with execfile and doesn't work with import
和我的库的文件以及我的funcs和类等等(library.py):
class another(object):
def __init__(self):
self.dynamic=c_config.static_var+1.3
我想用
导入我的库文件import library
导致我导入的对象"另一个()"没有看到配置类" c_config"使用static_var,即使我使用config类将其导入此文件...
execfile执行它(不确定原因)。我想构建它以便我使用import。
为什么对象" obj =另一个()"不能访问类" c_config"在文件中它被导入?
答案 0 :(得分:3)
最可能的问题是你在说
from test_bib.py import *
何时应该使用:
from test_bib import *
导入不需要.py
扩展名 - 实际上它会引发ImportError
。
这也适用于library.py
。由于您可以使用execfile
运行它,因此library.py
文件似乎与您的main.py
位于同一目录中。在这种情况下,您还应该能够执行以下操作:
import library
在这种情况下,您的another
课程可以通过以下方式访问:
obj = library.another()
编辑:
因此,查看您的最新修改时,c_config
似乎会在library.py
中使用,而在main.py
中定义。
由于您需要将import library
导入main
,因此c_config
中的library.py
无效。但导入main
会创建循环导入。通常最好将相互依赖的类保存在同一个文件中。
不确定为什么execfile
正在运行,除非它无声地失败。但我现在不在我的电脑上,所以我会研究一下。
答案 1 :(得分:0)
真正的问题是你有一个循环导入;要解决这个问题 - 只需使用静态变量作为参数调用another()
对象:
import library
class SomeObject(object):
static_var = 3
obj = library.Another(SomeObject.static_var)
在library.py
:
class Another(object):
def __init__(self, static_var):
self.dynamic_var = static_var + 1.3
我已经定义了一个类,并希望我导入的函数可以访问它
功能与方法不同。
一个类创建自己的命名空间(它有自己的范围),你不能从函数中访问外部范围。
请记住导入模块时,会执行模块内容。它已经在试图引用一个不存在的对象;这就是为什么它不起作用。