为什么不允许这样的导入?
文件: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。
你应该避免两个模块互相需要对方,可以选择把所有内容放在同一个模块里,或者把它们分成更多的模块。此外,把所有的导入放在文件的开头是个好习惯,这样可以避免一些混乱的情况。