1.定义和本质:
1)元类可以理解为 “类的类”,是创建类的模板。
2)所有的类都是由元类实例化而来,默认情况下,Python 使用type作为元类来创建普通类。如,定义一个简单的类MyClass,MyClass其实就是type的一个实例。
2.type元类:type是 Python 中最常用的元类,它有三个参数的调用形式type(name, bases, dict),其中name是类名(字符串类型),bases是一个包含基类的元组(可以为空),dict是包含类属性(包括方法和变量)的字典。比如,MyClass = type('MyClass', (), {'x': 10}) 就创建了一个名为MyClass的类,它没有基类,有一个属性x,其值为 10,效果等同于class MyClass: x = 10 。
3.在 Python 3 中,推荐使用metaclass关键字参数来指定元类,如class MyClass(metaclass=MyMeta): pass。
4.工作原理:当定义一个类时,Python 会按照以下步骤进行处理:
1)首先收集类定义中的属性到一个字典中;
2)然后确定该类的元类;
3)最后调用元类的__new__方法(该方法负责创建类对象),接着调用__init__方法对类进行初始化。
通过自定义元类的__new__和__init__方法,可以在类创建和初始化阶段进行各种自定义操作,如修改类的属性、动态添加方法等。