为什么不允许这样的导入?

3 投票
2 回答
597 浏览
提问于 2025-04-15 11:49

文件: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 个回答

5

因为 Python 在自己的文件中初始化类 A。这和 C 或 PHP 的包含方式不一样,后者是把每个导入的模块基本上都粘贴到原来的文件里。

要解决这个问题,你应该把类 B 放在和类 A 同一个文件里。或者你可以把类 B 放在 c.py 文件中,然后用 "from c import B" 来导入它。

4

你写的代码中,最接近可用的版本是:

==== 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。

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

你应该避免两个模块互相需要对方,可以选择把所有内容放在同一个模块里,或者把它们分成更多的模块。此外,把所有的导入放在文件的开头是个好习惯,这样可以避免一些混乱的情况。

撰写回答