查询'对象'类& python中的'type'类

时间:2014-04-07 19:16:26

标签: python oop

我在命令式/动态python语言的基于类的OOP范例方面有一个查询。下面是从link获取的python中的类层次结构图。

class hierarchy

根据图表,我理解,python中的每个数据类型都是一个类。 bool类是object类的直接子级。当我们创建一个新的用户定义类(Natalie)时,object类将成为此类的最终祖先。类对象(int / str / object)本身是type类的实例。在java世界中,我们将其称为“Class”类而不是type类。

我的问题是:

1) 我的理解是否正确?

2) 如果是,我会将typeobject类的箭头方向混淆。我怎么理解这个?

3) 我无法理解/想象这两个短语(棕色),请帮助我。

the object class is an instance of the type class and itself
the type class is an instance of the object class and itself

3 个答案:

答案 0 :(得分:5)

您的理解基本上是正确的。 typeobject的特殊之处在于它们是类型层次结构的基础。一切都是object的一个实例。每个类型/类都是type的实例。因此typeobject的实例,object也是type的实例。

这意味着继承关系实际上不能表示为树,因为有一个循环:typeobject是彼此的实例。这种相互继承通常是不可能的,但这就是Python中这些基本类型的方式:它们违反了规则。该图有点误导,因为它显示type继承自object,但反之亦然。实际上,typeobject之间的箭头应该是双头的,表明继承是双向的。

区分继承的类型/类和实例的内容非常重要,尽管这不是在该图中直接表示的。类或类型(如intNatalie)是object子类,但它是{{>>的实例 1}}。您在问题3中提到的两个陈述与此有关。 type类型是object的实例,因为一切都是对象; object也是object的一个实例,因为type是一个类型(也就是一个类)。同样,objecttype的一个实例,因为一切都是对象;而object也是type的一个实例,因为type是一种类型(它是类型的类型,以及用户定义类的类型)。

图中还有一个不准确的地方:type实际上并不是bool的直接子类,而是object的子类(int的直接子类。 1}})。

答案 1 :(得分:1)

print isinstance(type,object)
print type.__class__

print isinstance(object,type)

我不知道这是否会比对象更有帮助,但有一些经验证据

答案 2 :(得分:0)

在Java中,对象类是每个类的超类,并且单继承是适用的,但是在python中,它不是真的。

在Java中

enter image description here

在Python3中,从对象继承之前

enter image description here

继承对象后

enter image description here

因此,当您在pythyon中创建类时,它不是从对象继承的。它基本上遵循模块化体系结构。不像Java的Tree结构。