tre*_*der 3 python python-module python-3.x
假设我有这样的事情:
.
??? run.py
??? test
??? __init__.py
??? models
? ??? foo
? ? ??? baby.py
? ? ??? __init__.py
? ??? __init__.py
? ??? user.py
??? start.py
run.py
from test import start
Run Code Online (Sandbox Code Playgroud)
start.py
from .models import user
Run Code Online (Sandbox Code Playgroud)
user.py
from . import foo
print(foo.baby.Baby)
Run Code Online (Sandbox Code Playgroud)
baby.py
Baby = "I am a baby"
Run Code Online (Sandbox Code Playgroud)
现在,当你运行run.py文件时......
>>> python run.py
... traceback ...
AttributeError: 'module' object has no attribute 'baby'
Run Code Online (Sandbox Code Playgroud)
但是,如果你改变了start.py这样:
from .models.foo import baby
from .models import user
Run Code Online (Sandbox Code Playgroud)
一切正常.
如果先前没有加载baby模块start.py,则foo包对象没有对它的引用(foo.baby.Baby抛出AttributeError).但是当我加载baby模块时start.py,foo包对象自动获得对baby模块的引用.
谁能解释一下这是如何工作的?
在导入之前,子模块不是包的自动属性.
您需要导入test.models.foo.baby 第一之前foo.baby.Baby的作品.您可以在foo/__init__.py文件中执行此操作:
from . import baby
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |