最近有人问type和object以及和其他类之间的关系问题,接下来我将用最简单的图和语言来解释一下。
首先,强调两个名词概念:
经典类:没有继承(object)
新式类:继承(object),拥有object里面的方法。
其实,object是一个封装好内部属性的一个类。
python2.x版本定义一个类时,默认不继承(object)。python3.x版本定义一个类时,默认继承(object),建议使用我们在使用过程选择新式类
其次,我们先举个小例子,以Dog为名创建一个类,通过实例化创建d,确定d.__class__,int.__class__,float.__class__,object.__class__的父类。
class Dog:
pass
d = Dog()
print(d.__class__)
print(Dog.__class__)
print(int.__class__)
print(float.__class__)
print(object.__class__)
print(object.__class__)
print(type.__class__)
结果
<class '__main__.Dog'>
<class 'object'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
可以看出,实例对象d的父类为Dog,而Dog的父类为object,继而刨根问底查找object的父类,可以发现其父类为type,同时int和float父类也为type。为了更好的解释以上原理,我们用以下流程图进行描述。

结合代码运行结果和流程图进行解释,三个子类是基于type实例化产生的,同时type实例也是由type自身产生的,可以理解type为”造物主,造就了一切类,而object类也自然而然由type创建的,那么object的也是普通类吗?然而并不是,我们可以看到Dog的父类为object,为何呢?object其实为python的内置类,当我们查看内置类属性如下图所示。
object类内置了很多属性,在我们后期使用过程中直接继承object类后,简化了很多后续工作,也类似于一种标准库,为用户使用提供便捷。
不知道看到这里的你明白了type和object以及其他类之间的区别了吗?要是还没明白,我在总结一下总满意了吧?
type类是“造类主”,产生了所有的类,包括它自己(自产),而object也是type类实例化的结果,但其本身又具有内置函数设置的特点,为创建类简化一些属性的编写工作,因此在Python3.x版本上,将创建的普通类函数直接默认继承object类,便于使用。
以上就是对于type、object和普通类之间的联系与区别,相信聪明的你早已理解,那就点赞、收藏和评论吧!!!
本文解析了Python中type、object及普通类的关系。说明了object作为内置类简化了属性编写,并阐述了type作为“造类主”的角色。
1302





