我有两个python模块:
//// funcs.py
from classes import *
def func():
d = D()
print "func"
if __name__ == "__main__":
c = C()
//// classes.py
from funcs import *
class C:
def __init__(self):
print "C class"
func()
class D:
def __init__(self):
print "D class"
运行funcs.py会产生一个名为“全局名称'D'未定义”的NameError。但是,如果我注释掉D()实例的创建,一切正常。
为什么会这样?
由于
答案 0 :(得分:5)
这个工作正常而不会使您的代码复杂化:
/// funcs.py
import classes
def func():
d = classes.D()
print "func"
if __name__ == "__main__":
c = classes.C()
/// classes.py
import funcs
class C:
def __init__(self):
print "C class"
funcs.func()
class D:
def __init__(self):
print "D class"
有时使用简单导入要比from ... import ...
好得多。
有很好的文章:
http://effbot.org/zone/import-confusion.htm
答案 1 :(得分:2)
由于在模块初始化期间尝试使用循环导入的模块,会出现问题。为了澄清,使用“from module use *”需要编译模块。相反,如果你在两种情况下切换到使用“导入模块”,它应该可以正常工作。