Python 的导入功能有时仍然让我感到困惑。这是一个例子:
我的项目具有以下包结构:
Project/
src/
example/
__init__.py
an_example.py
top/
__init__.py
lin/
__init__.py
factory.py
在an_example.py
,我想写
from top import lin
if __name__ == '__main__':
a = lin.factory.AClass()
但是,这失败了:
a = lin.factory.AClass()
AttributeError: 'module' object has no attribute 'factory'
an_example.py
像这样写的时候工作:
from top.lin import factory
if __name__ == '__main__':
a = factory.AClass()
你能解释一下为什么像第一个版本那样写导入语句是错误的吗?我更喜欢一个完全限定的名称lin.factory.AClass
,例如factory.AClass
.