为什么NotImplementedType不是类型子类?

时间:2017-08-22 20:15:00

标签: python python-2.7

在检查内置类型NotImplementedType时,我注意到一些奇怪的事情。

>>> from types import NotImplementedType
>>> issubclass(NotImplementedType, type)
False
>>> type(NotImplementedType)
<type 'type'>

这两件事怎么可能是真的? NotImplementedType如何不是type的子类但又来自type

1 个答案:

答案 0 :(得分:4)

类不是type的子类,包括types.NotImplementedTypetype是类的元类

例如,自定义类和内置类型不是type 的子类

>>> class Foo: pass
...
>>> issubclass(Foo, type)
False
>>> issubclass(int, type)
False

只有其他元类是type的子类;像ABCMeta元类:

>>> from abc import ABCMeta
>>> issubclass(ABCMeta, type)
True

这类似于动作和课程;实例不是其类的子类;使用isinstance()

>>> issubclass(Foo(), Foo)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: issubclass() arg 1 must be a class
>>> isinstance(Foo(), Foo)
True
>>> import types
>>> isinstance(types.NotImplementedType, type)
True