假设我有这样的事情:
. ├── 运行.py └── 测试 ├── __init__.py ├── 型号 │ ├── foo │ │ ├── baby.py │ │ └── __init__.py │ ├── __init__.py │ └── user.py └── start.py
运行.py
from test import start
开始.py
from .models import user
用户.py
from . import foo
print(foo.baby.Baby)
宝贝.py
Baby = "I am a baby"
现在,当您运行run.py
文件时...
>>> python run.py
... traceback ...
AttributeError: 'module' object has no attribute 'baby'
但是,如果你改变start.py
这样的:
from .models.foo import baby
from .models import user
一切正常。
当baby
模块中的模块start.py
没有提前加载时,foo
包对象没有对它的引用(foo.baby.Baby
throw an AttributeError
)。但是当我在中加载baby
模块时start.py
,foo
包对象自动获得了对baby
模块的引用。
有人可以解释一下这是如何工作的吗?