Python 中的元类
元类(metaclass)是 Python 中一个高级概念,它控制了类的创建过程。在 Python 的开源框架中,可以看到很多元类的相关身影,学习并理解元类也可以帮助理解 Python 中的类的创建过程。 一切皆对象 在 Python 中一切皆对象,类也不例外,类也是一个对象,可以像普通对象一样进行赋值、拷贝以及作为函数的参数使用。我们知道每个对象都有一个类型,在 Python 中可以通过 type() 函数进行查看,一个 Python 实例它的类型是 class 类名,那类这个对象的类型又是什么呢,可以通过下面的一组例子进行查看。 class Foo: def __init__(self): pass foo = Foo() # 也可以通过 obj.__class__ 查看类型 print(type(foo)) # <class '__main__.Foo'> print(type(Foo)) # <class 'type'> print(type(1)) # <class 'int'> print(type(int)) # <class 'type'> print(type(type)) # <class 'type'> 我们可以看到实例 foo 的类型是class Foo, 而 Foo (类本身) 的类型是 type ,更近一步地,查看内置类型以及 type 本身的类型。我们可以发现,类的类型是 type,这实际上就是元类。正如普通对象是类的实例一样,Python 中的任何类都是type元类的实例,我们可以用下面的图来表示这种关系。 <!DOCTYPE html> 图1. Python 类型示意图 创建类:type 类也是对象,可以在运行时动态的创建它们,就像其他任何实例对象一样,例如可以在函数中创建类。另外,借助type,也能动态的创建类。type可以接受一个类的描述作为参数,然后返回一个类。可以像这样使用:type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值)),使用这种方式上一节中的类可以使用下面的方式创建: ...