Python进阶:一步步理解Python中的元类metaclass

虽然Python本身很难说是面向对象语言,但Python中的数据模型( data model

)可以说真的是“纯面向对象”。在Python的世界里,一切皆是对象。无论是数值、字符串、序列、字典、函数、模块、类、实例、文件等等。

元类(metaclass)是Python 2.2中引入的概念,它的作用是定制类的创建行为。这么解释可能有点难理解,那么这篇文章就通过实例,一步步解释Python中的元类。

1. Python中一切皆对象,包括类

class Foo:def hello(self):print("hello world!")returnfoo = Foo()print(type(foo))            # <class '__main__.Foo'>print(type(foo.hello))      # <class 'method'>print(type(Foo))            # <class 'type'>temp = Foo                  # 赋值给其他变量Foo.var = 11                # 增加参数print(Foo)                  # 作为函数参数

例子中type(Foo)说明Foo本身也是一个对象,可以将其赋值给其他对象、对其添加属性、将其作为函数参数传递等等。

2. 类的创建过程

在上边的例子中,类Foo的创建过程中会执行class语句,此时需要首先确定元类(元类定制类的创建行为)。元类的确定过程如下: