最近有人问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
和普通类之间的联系与区别,相信聪明的你早已理解,那就点赞、收藏和评论吧!!!