os.Mapping是什么?为何不在os文档且模块归属存疑?
关于os.Mapping的疑问
我在学习Python时,使用dir()函数查看os模块,发现了名为Mapping的条目,执行了以下操作:
Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> type(os.Mapping) <class 'abc.ABCMeta'> >>> help(os.Mapping) Help on class Mapping in module collections.abc: class Mapping(Collection) | A Mapping is a generic container for associating key/value | pairs.
我在Python官方文档搜索"os.Mapping"没有结果,并且发现dir(os)显示Mapping在os模块中,但help()却显示它属于collections.abc模块,同时查看collections模块的官方文档也找不到Mapping的相关内容。
我有以下疑问:
- os.Mapping究竟是什么?
- 为何它未出现在os模块的官方文档中?
- 为何其模块归属显示存在差异?
解答
os.Mapping的本质
os.Mapping并不是os模块原生实现的类,它其实是collections.abc.Mapping的导入别名。os模块内部出于兼容旧代码的目的,从collections.abc导入了这个抽象基类,并将其挂载到自身命名空间下,但这只是内部实现细节,不属于os模块对外公开的功能。
为何未出现在os官方文档
Python官方文档只会收录模块的公开、稳定API,这类为兼容而生的内部导入项并非os模块的核心功能,也不推荐开发者直接使用,因此不会被写入官方文档,避免大家误用这类非公开的内部内容。
模块归属显示差异的原因
dir(os)列出的是os模块命名空间中所有可访问的名称:只要某个名称被导入或定义在os模块内,dir()就会将其列出,所以能看到Mapping。help()展示的是类的实际定义位置:Mapping类本身在collections.abc模块中定义,os只是将其导入使用,因此help()会指向它的原生模块。
另外你在collections主模块文档中找不到Mapping,是因为它属于collections.abc子模块(专门存放抽象基类的子模块),需要查看collections.abc的专属文档才能找到相关说明。
内容的提问来源于stack exchange,提问作者Aleksey Tsalolikhin
相关产品推荐
相关产品推荐

