type是Python中所有类的超级类吗?

2024-04-23 07:42:52 发布

您现在位置:Python中文网/ 问答频道 /正文

既然type是所有类的超类,为什么isinstance(1, type)是{}? 我理解错了吗?在


Tags: typeisinstance
2条回答

type不是所有类的超类。它是所有类(没有自定义元类)的类型。注意区别:

>>> isinstance(1, int)
True
>>> isinstance(1, type)
False
>>> isinstance(int, type)
True

数字1不是类型的实例。相反,int类型本身是type的实例。在

编辑:

这些例子可以帮助您:

^{pr2}$

从你的评论来看,你似乎误解了继承的工作原理。作为类型的实例和作为类型的子类(或子类型)是有区别的。如果对象X是类型A的实例,而类型A是类型B的子类,那么X也是B的实例。但是如果类型A是类型B的实例,那么X就不是B的实例。换句话说,子类是可传递的,但实例性不是。在

一个真实世界的类比是类似于“物种”和“智人”。你可以说“物种”是一种类型,“智人”是这种类型的一个实例;换句话说,“智人”是一种特殊的物种。但是“智人”也是一种类型,一个人就是这种类型的一个实例。例如,巴拉克·奥巴马(举一个著名的例子)就是“智人”的一个例子;也就是说,他是一个特殊的智人。但巴拉克奥巴马不是一个物种的例子;他自己也不是一个物种。在

typeint和数字1之间的关系是相似的。数字1是int的实例,int是{}的实例,但这并不意味着1是类型的实例。在

这是因为type不是所有内置类型的超类型。object是。在

相关问题 更多 >