元编程Python元类

基础理解

元编程MetaProgramming主要说的是编写改变编程本身的程序
Python 中的所谓元类(MetaClass),具体就是在这个类的本身之外,编写出能够改变这个类本身的语法特性的程序
先来看以下的示例:

可以看到,Person 和 Animal 这两个类的类型均是 type, 其实所有的类的类型都是 type,因此 type 是类的大佬,其它创建出来的类都是它的小弟
代码示例:

以上代码可以通过 type 这样来实现,取得了相同的效果:

思考: 如果让 MetaClass 成为 type 的子类,也就是元类继承了 type 会怎么样?
再把这句话粘在这就是在这个类的本身之外,编写出能够改变这个类本身的语法特性的程序。

创建元类

创建元类要用的魔法方法:

  1. __init__
    我们知道在类中这个方法是用于初始化的,当元类被初始化的时候就会调用这个方法。

  2. __new__
    这个方法会在初始化前调用,也就是说会在 __init__ 前被调用,在这里可以定义元类创建时的一些操作。

  3. __call__
    在元类中定义这个方法,可以在这里面定义类实例的操作,这也是做到改变类的关键。

定义元类如下:

执行顺序如下:

元类一般可以做到拦截类本身的行为,从而做出一些改变及一些特殊的操作
比如在类中定义一个 tag

那么在元类中是可以获取到类中的相关属性的,

如图红框中直接就取得了 tag 属性值

假设元类要针对这个类做一些额外的操作,那么就可以这样:

对元类的初步认识如上,能用好元类去实现当然好,更多的是在看别人写的代码遇到了,知道这是元类编程,不那么懵逼而也!!其实还是很懵啊!!!!