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
是如何与fromcollections.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