为什么不允许这样的进口?

时间:2009-05-25 08:22:30

标签: python

文件:b.py

class B:
    def __init__(self):
        print "B"

import a

a = A()

文件:a.py

class A(B):             ###=> B  is not  defined
    def __init__(self):
        print "A"

当我尝试执行b.py时,表示B未定义。我误解了“进口”吗?

如果你可以指出问题,那么非常感谢。

2 个答案:

答案 0 :(得分:5)

因为python在自己的文件中初始化了A类。它不像C或PHP包含,其中每个导入的模块基本上都粘贴到原始文件中。

您应该将B类放在与A类相同的文件中以解决此问题。或者你可以把B类放在c.py中并用“from c import B”导入它。

答案 1 :(得分:5)

与您的代码最接近的工作是:

==== FILE: b.py ====

class B:
    def __init__(self):
        print "B"

import a

if __name__ == "__main__":
    a = a.A()

==== FILE: a.py ====
import b

class A(b.B):             ###=> B  is not  defined
    def __init__(self):
        print "A"

注意差异:

  • 文件(模块)是命名空间,如果导入“a”,则将其A类称为“a.A”。

  • 如果您想使用b,则需要在a.py中导入。

您希望避免让两个模块需要相互包含,方法是将所有内容放在同一个模块中,或者将内容拆分到更多模块中。此外,最好将所有导入放在文件的头部,这样就不可能进行这种编辑。