コレクションモジュールのソースを読んでいます。モジュールは、collections.py と _abcoll.py の 2 つのファイルを組み合わせたものです。これがモジュールのドキュメントで、ソースコードへのリンクが含まれています。
collections.py の冒頭:
__all__ = ['Counter', 'deque', 'defaultdict', 'namedtuple', 'OrderedDict']
# For bootstrapping reasons, the collection ABCs are defined in _abcoll.py.
# They should however be considered an integral part of collections.py.
from _abcoll import *
import _abcoll
__all__ += _abcoll.__all__
...
_abcoll.py では、実際の「ブートストラップの理由」が何であるかがよくわかりません。
6 DON'T USE THIS MODULE DIRECTLY! The classes here should be imported
7 via collections; they are defined here only to alleviate certain
8 bootstrapping issues. Unit tests are in test_collections.
9 """
10
11 from abc import ABCMeta, abstractmethod
12 import sys
13
14 __all__ = ["Hashable", "Iterable", "Iterator",
15 "Sized", "Container", "Callable",
16 "Set", "MutableSet",
17 "Mapping", "MutableMapping",
18 "MappingView", "KeysView", "ItemsView", "ValuesView",
19 "Sequence", "MutableSequence",
20 ]
...
に_abc.__all__
は、このファイル内のすべてのクラス定義が含まれており、collections.py では、* からインポートして独自の_abcoll
に追加します。この方法で「特定のブートストラップの問題を軽減」できる理由がわかりませんでした。_abcoll.__all__
__all__
何かご意見は?ありがとう