python - type 是 Python 中所有类的父类(super class)吗?

标签 python superclass

鉴于 type 是所有类的父类(super class),为什么 isinstance(1, type)False? 我对这个概念的理解有误吗?

最佳答案

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

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

数字 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!

从您的评论来看,您似乎误解了继承的工作原理。作为类型的实例和作为类型的子类(或子类型)是有区别的。如果对象 X 是类型 A 的实例,并且类型 A 是类型 B 的子类,则 X 也是 B 的实例。但是如果类型 A 是一个instance 类型 B,则 X 不是 B 的实例。换句话说,子类是可传递的,但实例不是。

现实世界的类比是“物种”和“智人”之间的类比。您可以说“物种”是一种类型,而“智人”是该类型的一个实例;换句话说,“智人”是一个特定的物种。但是“智人”也是一种类型,人类个体就是这种类型的一个实例。例如,巴拉克奥巴马(举一个众所周知的例子)是“智人”的一个例子;也就是说,他是一个特定的智人。但是巴拉克奥巴马不是物种的一个例子;他本身不是一个物种。

typeint和数字1的关系类似。数字 1 是 int 的实例,inttype 的实例,但这并不意味着 1 是 type 的实例类型。

关于python - type 是 Python 中所有类的父类(super class)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124284/

相关文章:

python - 如何修补/模拟导入?

python - 由另一个 Pandas 重命名列

python - Django 中同一字段的多个外键

java - 了解上界和下界?在 Java 泛型中

java - 从父类(super class)构造子类

python - 使用 pandas.to_datetime 转换 None 值是不可预测的

python - 为什么TensorFlow的除法没有axis参数?

java - 如何从父类(super class)调用子类方法?

java - 可以覆盖@FindBy 的父类(super class)

ios - 子类未找到父类(super class)接口(interface)的 Objective-c 错误