本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是Python专题第18篇文章,我们来继续聊聊Python当中的元类。
在上上篇文章当中我们介绍了type元类的用法,在上一篇文章当中我们介绍了__new__函数与__init__函数的区别,以及它在一些设计模式当中的运用。这篇文章我们来看看metacalss与元类,以及__new__函数在元类当中的使用。
上一篇文章非常重要,是这一篇的基础,如果错过了上篇文章,推荐回顾一下:
metaclass
metaclass的英文直译过来就是元类,这既是一个概念也可以认为是Python当中的一个关键字,不管怎么理解,对它的内核含义并没有什么影响。我们可以不必纠结,就认为它是类的类的意思即可。在这个用法当中,支持我们自己定义一个类,使得它是后面某一个类的元类。
之前使用type动态创建类的时候,我们传入了类名,和父类的tuple以及属性的dict。在metaclass用法当中,其实核心相差不大,只是表现形式有所区别。我们来看一个例子即可:
class AddInfo(type):
def __new__(cls, name, bases, attr):
attr['info'] = 'add by metaclass'
return super().__new__(cls, name, bases, attr)
class Test(metaclass=AddInfo):
pass
在这个例子当中,我们首先创建