Python范围/命名空间问题

taf*_*afi 4 python scope namespaces

我有两个python模块:

//// funcs.py

from classes import *

def func():
    d = D()
    print "func"

if __name__ == "__main__":
    c = C()
Run Code Online (Sandbox Code Playgroud)

//// classes.py

from funcs import *

class C:
    def __init__(self):
        print "C class"
        func()

class D:
    def __init__(self):
        print "D class"
Run Code Online (Sandbox Code Playgroud)

运行funcs.py会产生一个NameError,表示"未定义全局名称'D'".但是,如果我注释掉D()实例的创建,一切正常.

为什么会这样?

谢谢

Gan*_*ndi 5

这个工作正常,而不会使您的代码复杂化:

///funcs.py

import classes

def func():
    d = classes.D()
    print "func"

if __name__ == "__main__":
    c = classes.C()
Run Code Online (Sandbox Code Playgroud)

///classes.py

import funcs

class C:
    def __init__(self):
        print "C class"
        funcs.func()

class D:
    def __init__(self):
        print "D class"
Run Code Online (Sandbox Code Playgroud)

有时候使用简单的导入比使用简单得多from ... import ....有很好的文章:http: //effbot.org/zone/import-confusion.htm