【问题标题】:Attribute not added to module after importing导入后属性未添加到模块
【发布时间】:2019-01-29 22:40:51
【问题描述】:

我做了以下实验:

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在pack1/pack2/mod2.py中不是pack1的属性。

但是,当 pack1/pack2/__init__.py not import pack pack1.pack2.mod2 时,它可以工作。

这是为什么?

【问题讨论】:

    标签: python python-3.x python-2.7 import


    【解决方案1】:

    模块在其导入完成时作为其包的属性添加。 (请注意,这会干扰循环相对导入。)这里,pack2 立即导入 mod2,因此(无论像 mod3 那样进一步完成导入)它不会出现在 @ 期间的 pack1 字典中987654325@的执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      相关资源
      最近更新 更多