在检查内置类型NotImplementedType
时,我注意到一些奇怪的事情。
>>> from types import NotImplementedType
>>> issubclass(NotImplementedType, type)
False
>>> type(NotImplementedType)
<type 'type'>
这两件事怎么可能是真的? NotImplementedType
如何不是type
的子类但又来自type
?
答案 0 :(得分:4)
类不是type
的子类,包括types.NotImplementedType
。 type
是类的元类。
例如,自定义类和内置类型不是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