我有两个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会产生一个NameError,表示"全局名称'D'未定义"。但是,如果我注释掉D()实例的创建,一切都可以正常工作。
为什么会发生这种情况?
谢谢
这个可以很好地工作,而不会使代码复杂化:
///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
由于在模块初始化期间试图使用循环导入的模块而出现问题。澄清一下,使用"from module use *"需要编译一个模块。相反,如果你在两种情况下都使用"import module",它应该可以正常工作。