对象是 Python 2.X 中类型的子类吗?

Posted

技术标签:

【中文标题】对象是 Python 2.X 中类型的子类吗?【英文标题】:Is object a subclass of type in Python 2.X? 【发布时间】:2019-03-18 20:57:39 【问题描述】:

我从 Learning Python(第 5 版)中读到(第 1364 页,第 40 章):

在 Python 2.X 中,新式类继承自 object,它是 type 的子类;经典类是 type 的实例,不是从类创建的。

然而,

issubclass(object, type)

给我

False

在 Python 2.7 中。

所以,作者似乎做了一个错误的陈述,即 objecttype 的子类,还是我遗漏了什么?

【问题讨论】:

如果你尝试issubclass(type(object), type)会怎样? "classic classes are instances of type" 也是假的。 【参考方案1】:

object 不是type 的子类,这将使其成为metaclass。而objecttype 类型的instance

函数issubclass 检查给定类是否继承自另一个。

class A:
    pass

class B(A):
    pass

print(issubclass(B, A)) # True

它不检查给定类型的实例 os。要验证object 是否确实属于type,您需要使用isinstance

print(isinstance(object, type)) # True

【讨论】:

【参考方案2】:

使用isinstance()。在python 2.7.10

print object
print isinstance(object, type)
print issubclass(object, type)
print object.__class__

输出

<type 'object'>
True
False
<type 'type'>

type 是一个元类explained here

【讨论】:

以上是关于对象是 Python 2.X 中类型的子类吗?的主要内容,如果未能解决你的问题,请参考以下文章

java中,子类能调用父类中所有方法、对象吗?是不是父类也能调用子类所有……?

Python3中的子类化类型与对象[重复]

请教,父类中如何调用子类中的虚函数

Python:float的子类可以在其构造函数中获取额外的参数吗?

Python 覆盖子类中方法返回的类型提示,无需重新定义方法签名

对于一个对象,我可以使用反射或其他方式获取它的所有子类吗?