1
为什么Python将导入的模块附加到包中?我知道我不应该担心这个,但只是想知道是否有任何解释。在以下情况下,我的理解是导入logging
会将其添加到模块名称空间。那么为什么要将它添加到包名称空间呢?为什么python将导入的模块附加到包中?
$ tree -I *.pyc
.
├── pkga
│ ├── __init__.py
│ └── modb.py
└── test.py
$ cat pkga/__init__.py
$
$ cat pkga/modb.py
import logging
import types
$ cat test.py
import pkga.modb
import pprint
import sys
pprint.pprint(sorted([ x for x in sys.modules.keys() if x.startswith("pkg")]))
$ python test.py
['pkga', 'pkga.logging', 'pkga.modb', 'pkga.types']
但是为什么它包含'pkga.logging'和'pkga.types'而不是'logging'和'types'? – 2012-02-09 07:29:02
@ IgnacioVazquez-Abrams保留名称空间。如果另一个模块实现了一个名为'logging'的类或函数,那么应用程序可能会因混乱而崩溃 – vikki 2012-02-09 07:39:49
@ IgnacioVazquez-Abrams我认为vikki是正确的。如果在'pkga'下创建'logging.py','sys.modules'将具有相同的密钥,但'pkga.logging'将是一个完全不同的模块。 – jcollado 2012-02-09 07:45:15