我做了以下实验室:
vagrant@ubuntu-xenial:~/test$ tree
.
├── pack1
│ ├── __init__.py
│ ├── mod1.py
│ └── pack2
│ ├── __init__.py
│ ├── mod2.py
│ └── mod3.py
└── test.py
2 directories, 6 files
vagrant@ubuntu-xenial:~/test$ tail -n +1 *.py */*.py */*/*.py
==> test.py <==
#!/usr/bin/python
import pack1.pack2.mod2
print(__file__)
try:
print(pack1.__dict__['pack2'])
except Exception as error:
print("MISSING PACK2")
==> pack1/__init__.py <==
==> pack1/mod1.py <==
==> pack1/pack2/__init__.py <==
import pack1.pack2.mod2
==> pack1/pack2/mod2.py <==
import pack1.pack2.mod3
print(__file__)
try:
print(pack1.__dict__['pack2'])
except Exception as error:
print("MISSING PACK2")
==> pack1/pack2/mod3.py <==
vagrant@ubuntu-xenial:~/test$ ./test.py
/home/vagrant/test/pack1/pack2/mod2.py
MISSING PACK2
./test.py
<module 'pack1.pack2' from '/home/vagrant/test/pack1/pack2/__init__.py'>
vagrant@ubuntu-xenial:~/test$
在导入 pack1.pack2.mod3 后,pack2 不是 pack 1/pack 2/mod 2.pay 中 pack1 的属性。
但是,当 pack1/pack2/__init__.py 执行时,它会起作用not导入包 pack1.pack2.mod2。
为什么是这样?
模块在导入时作为其包的属性添加finishes。 (请注意,这可能会干扰循环相对导入。)在这里,pack2
立即进口mod2
,所以(无论进一步完成的导入,如mod3
)它没有出现在pack1
字典期间mod2
的执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)