我在检查内置类型NotImplementedType
时注意到一些奇怪的东西。
>>> from types import NotImplementedType
>>> issubclass(NotImplementedType, type)
False
>>> type(NotImplementedType)
<type 'type'>
这两件事怎么可能是真的?如何才能使
NotImplementedType
不是type
的一个子类,但却从type
派生? 最佳答案
类不是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
这类似于intance和类;实例不是它们类的子类;使用
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