每天开心一点

理解Python中的metaclass

2020-10-15 17:23:00    六月    667    来源: https://www.jianshu.com/p/224ffcb8e73e

在理解metaclass之前,我们需要先理解Python中的class。从某种程度上来说,Python中的class的定位比较特殊。

对于大部分面向对象语言来说,class是一段定义了如何产生object的代码块。

但是在Python中,class并不只有这一角色。class实际上也是object。当我们使用class定义一个类的时候,Python会执行相应代码并在内存中创建一个名为example 的object。

但该object(class)是具有创建其他object(instance)的能力的。这也是这个object是一个class的原因。由于本质上class任然是一个object,所以我们可以对class做出以下操作:

  • 我们可以将其赋给一个变量

  • 我们可以对其进行拷贝

  • 我们可以赋给其新的变量

  • 我们可以将其作为参数赋给其他的函数

动态创建class

既然class也是object,那么我们就可以像创建普通的object一样动态创建class。

但通过这种方式创建class并没有特别动态。我们任然需要自己定义类的具体内容。考虑到class也是object,那么也一定有某种方法能够像产生instance一样产生类。

当我们使用class关键字创建类的时候,Python会自动创建对应的object。像Python中其他大多数情况一样,我们也可以手动创建这个class object。这一操作可以通过type() 实现。

究竟什么是metaclass?

metaclass就是Python中用来创建class object的class。我们可以将其看做能够产生class的类工厂。

包括int, string, function, class在内,Python中所有的东西都是object,而所有的object都是被相应的class创造的。我们可以通过__class__ 的值得知这一点。

参考: https://www.jianshu.com/p/224ffcb8e73e

https://www.cnblogs.com/Simon-xm/p/4034416.html