gpt4 book ai didi

python - 关于 collections.py 和 _abcoll.py (python 2.7.3) 中引导问题的代码注释

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:22 24 4
gpt4 key购买 nike

我正在阅读 collections 模块的源代码。该模块是两个文件的组合:collections.py 和 _abcoll.py。这是 doc模块,它包含指向源代码的链接。

在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__。我不明白为什么这种方式可以“缓解某些引导问题”。

有什么想法吗?谢谢

最佳答案

问题似乎出在旧版本的 os.py 中,例如this one :

from _abcoll import MutableMapping # Can't use collections (bootstrap)

显然,collections 间接需要 os(可能用于模块末尾的测试,其中进行了一些酸洗,也可能在其他地方)所以会有没有 _abcoll 模块的循环依赖。

(请注意,在 Python >=3.3 中,有一个单独的 collections.abc 模块。)

关于python - 关于 collections.py 和 _abcoll.py (python 2.7.3) 中引导问题的代码注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com