我在命令式/动态python语言的基于类的OOP范例方面有一个查询。下面是从link获取的python中的类层次结构图。
根据图表,我理解,python中的每个数据类型都是一个类。 bool
类是object
类的直接子级。当我们创建一个新的用户定义类(Natalie
)时,object
类将成为此类的最终祖先。类对象(int
/ str
/ object
)本身是type
类的实例。在java世界中,我们将其称为“Class”类而不是type
类。
我的问题是:
1) 我的理解是否正确?
2)
如果是,我会将type
到object
类的箭头方向混淆。我怎么理解这个?
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
答案 0 :(得分:5)
您的理解基本上是正确的。 type
和object
的特殊之处在于它们是类型层次结构的基础。一切都是object
的一个实例。每个类型/类都是type
的实例。因此type
是object
的实例,object
也是type
的实例。
这意味着继承关系实际上不能表示为树,因为有一个循环:type
和object
是彼此的实例。这种相互继承通常是不可能的,但这就是Python中这些基本类型的方式:它们违反了规则。该图有点误导,因为它显示type
继承自object
,但反之亦然。实际上,type
和object
之间的箭头应该是双头的,表明继承是双向的。
区分继承的类型/类和实例的内容非常重要,尽管这不是在该图中直接表示的。类或类型(如int
或Natalie
)是object
的子类,但它是{{>>的实例 1}}。您在问题3中提到的两个陈述与此有关。 type
类型是object
的实例,因为一切都是对象; object
也是object
的一个实例,因为type
是一个类型(也就是一个类)。同样,object
是type
的一个实例,因为一切都是对象;而object
也是type
的一个实例,因为type
是一种类型(它是类型的类型,以及用户定义类的类型)。
图中还有一个不准确的地方:type
实际上并不是bool
的直接子类,而是object
的子类(int
的直接子类。 1}})。
答案 1 :(得分:1)
print isinstance(type,object)
print type.__class__
print isinstance(object,type)
我不知道这是否会比对象更有帮助,但有一些经验证据
答案 2 :(得分:0)