假设我有这样的事情:
.
├── 运行.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.Babythrow an AttributeError)。但是当我在中加载baby模块时start.py,foo包对象自动获得了对baby模块的引用。
有人可以解释一下这是如何工作的吗?