Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “isinstance”与“collections.abc.Collection”和“collections.abc.Mapping”的结果不同`_Python_Python 3.x - Fatal编程技术网

Python “isinstance”与“collections.abc.Collection”和“collections.abc.Mapping”的结果不同`

Python “isinstance”与“collections.abc.Collection”和“collections.abc.Mapping”的结果不同`,python,python-3.x,Python,Python 3.x,我很难理解isinstance是如何与fromcollections.abc一起使用的。为collections.abc.Mapping实现所有指定方法的我的类不会使isinstance为我的类返回True,但会使isinstance为collections.abc.Collection返回True。我的类没有在ABC或ABC注册为子类 运行以下代码(使用Python 3.7,但我不确定这是否重要): 提供以下输出: Is collection? True Is mapping? False

我很难理解
isinstance
是如何与from
collections.abc
一起使用的。为
collections.abc.Mapping
实现所有指定方法的我的类不会使
isinstance
为我的类返回True,但会使
isinstance
collections.abc.Collection
返回True。我的类没有在ABC或ABC注册为子类

运行以下代码(使用Python 3.7,但我不确定这是否重要):

提供以下输出:

Is collection? True
Is mapping? False

我是在实现中遗漏了什么,还是
集合
映射
的行为有所不同?

通过对这一点的调查,我发现一些ABC实现了一个
\uuuuuu子类hook\uuuuuu
方法来确定一个类是否看起来像ABC的子类。至少在Python3.9中,有些ABC实现了
\uuuu子类hook\uuuu
,有些则没有。做和不做

我在任何地方都没有看到这适用于哪种ABC,所以可能唯一知道的方法就是尝试或查看源代码

Is collection? True
Is mapping? False