なぜ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']
しかし、なぜ 'logging'と' types'の代わりに 'pkga.logging'と' pkga.types'が入っていますか? –
@ IgnacioVazquez-Abramsは名前空間を保持します。別のモジュールが 'logging'というクラスや関数を実装すると、アプリケーションは混乱のためにクラッシュする可能性があります。 – vikki
@ IgnacioVazquez-Abrams私はvikkiが正しいと思います。 'logging.py'が' pkga'の下で作成された場合、 'sys.modules'は同じキーを持ちますが、' pkga.logging'はまったく別のモジュールです。 – jcollado