由于type是所有类的超类,为什么isinstance(1, type)是 False?我理解这个概念错了吗?
Bre*_*arn 12
type不是所有类的超类.它是所有类的类型(没有自定义元类).注意区别:
>>> isinstance(1, int)
True
>>> isinstance(1, type)
False
>>> isinstance(int, type)
True
Run Code Online (Sandbox Code Playgroud)
数字1不是类型的实例.相反,int类型本身就是一个实例type.
编辑:
这些示例可以帮助您:
>>> isinstance(1, int)
True
>>> issubclass(1, int)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
issubclass(1, int)
TypeError: issubclass() arg 1 must be a class
>>> class Foo(object):
... pass
>>> isinstance(Foo, type)
True
>>> issubclass(Foo, type)
False # Note the difference from the previous!
>>> isinstance(Foo, object)
True
>>> issubclass(Foo, object)
True
>>> isinstance(int, type)
True
>>> issubclass(int, type)
False # Note the difference from the previous!
Run Code Online (Sandbox Code Playgroud)
从您的评论中,您似乎误解了继承的工作原理.作为类型的实例和作为类型的子类(或子类型)之间存在差异.如果对象X是类型A 的实例,并且类型A是类型B 的子类,则X也是B的实例.但是如果类型A是类型B 的实例,则X不是B的实例.换句话说,子类别是传递性的,但实例却不是.
现实世界的类比将是"物种"和"智人"之间的类比.你可以说"物种"是一种类型而"同性恋者"是这种类型的一个实例; 换句话说,"智人"是一个特殊的物种.但是"智人"也是一种类型,而个人就是这种类型的一个实例.例如,巴拉克奥巴马(选择一个着名的例子)是"智人"的一个例子; 也就是说,他是一个特别的智人.但巴拉克奥巴马不是物种的例子; 他自己不是一个物种.
之间的关系type,int和数字1,是相似的.数字1是实例int,int是实例type,但这并不意味着1是类型的实例.