Python作用域/命名空间问题



我有两个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",它应该可以正常工作。

最新更新