Python面向对象你都会?元类了解一下
在大家学习python的时候,一定听说过一句话:
在我们python中万物皆对象,不管是整数、字符串、列表、字典这些基本数据类型,还是函数、以及自定义类创建出来的对象,在python中它们都是对象。
如果我们想知道一个对象的类型,可以通过type函数来查看,type返回出来的就是创建这个对象的类。
运行结果:
在上面的运行结果中我们可以看到自定义的类创建出来的对象,type返回出来的就是我们自定义的这个类(__main__代表的是当前这个模块)。
type(10)返回的结果是int,也就是说10是int这个类创建出来的,自定义的函数func是function这个类创建出来的。
我们可以看一下int的源码中可以看到,它就是一个类,不仅如此,python的基本数据类型,每一个类型都是一个类。
function的源码,同样也是一个类。
在上面我们知道了python中所有的内置数据类型,以及函数都是由类创建出来的,那么这个时候肯定会由疑问。
问题一:对象是由类创建出来的,那么类是不是对象?类又是由什么创建出来的?
python中万物皆对象,当然也包括类,类也是对象,至于类是由什么创建出来的,我们可以通过type函数来看一下
在上面的结果中我们可以看到:
◆ obj_t,是由TestClass这个类创建出来的
◆ 而TestClass,使用 type创建出来的
问题二:type查看类的类型返回出来的是type,type不是个内置函数吗?
正如上面的结果所示,你没看错,类的类型是type。
类就是由type创建出来的,type虽然我们把它叫做python的内置函数,但其实它是一个类,我们一起来看一下它的源码。
在type的源码的文档注释中我们可以看到,type不仅可以用来查看对象的类型,它还可以用来创建一个新的类。
到这里,我们明确的知道了类也是对象,类是由type这个类创建出来的对象,那么type是由什么创建出来的呢?
问题三:类是由type创建出来的,那么type这个类呢,它是什么类型?
在我们柠檬版有一句话,能动手就绝不动口,实践出真知,这里我们可以动手通过代码来查看一下type到底是由什么创建出来的。
从上面的代码中我们可以看到,type是这个类也是type类型,就是说type也是type创建出来的。
到这里我们可以理一下思路,python中万物皆对象,所有的对象都是类创建的,而类又是由type创建的,那么type到底是什么呢?
好了,也不跟大家卖关子了,type它究竟是什么呢?
type其实就是我们所说的元类,在python3中所有的类都是type这个元类创建出来的。
下面给大家来画个图来了解一下:
问题:元类到底有什么用?
元类比99%的用户所忧虑的东西具有更深的魔法。如果你犹豫考虑是否需要它们,那么实质上你不会需要它们 —— 蒂姆·彼得斯
(实际需要它们的人确信他们确实需要,并且不需要进行任何解释)。
关于元类就给大家简单的介绍到这里,如果想更加深入的了解面向对象,以及更多元类相关的知识点和应用,请关注我们的测试开发课程。
柠檬班测试开发课程中,针对面向对象和元类会有更加深入的讲解。
本文由柠檬班木森老师原创,转载需注明出处!
——————————————————————————————————
今天的小分享就到这了,有问题可以+群:939885326
讨论,暗号:****,群内有各大城市软件测试招聘(北上广深比较多)消息,每周1至周5群都会有免费公开课,笔试面试题分享哒!