元类(metaclass)就是类的类。在python中,一切皆是对象,包括我们定义的类,也是一个对象,只不过这个对象具备了实际化一个新对象(instance)的功能。
即 metaclass -> class -> instance ,实际上 class 和 instace 都是object。
实际上,在python中,如果没有特别定义的类,那么它将会由type创建,type就是Python在背后用来创建所有类的元类。
当你使用class关键字声明一个类的时候,python解释器在执行的时候就会通过type在内存中创建一个对象。这个对象就是你所声明的类,并且它具有创建对象(类实例)的能力,这就是它为什么是一个类的原因,但是本质上它还是一个对象。所以我们可以对类做以下操作:
一般来说我们在代码中动态创建一个类是通过声明class并编写整个类的代码创建的(在静态语言中这是不允许的),这时由python解释器自动创建这个对象(或者说类)。
同样的。我们也可以用手动的方式创建它。
type(class_name, base_class_tuple, attribute_dict)
这其中class_name为类的名称;base_class_tuple为type创建类所继承类的元组,通常定义是继承的父类;attribute_dict为type创建类的属性,不单纯指值属性,也可以是方法。
举个例子:
Foo= type('Foo', (object,), {'bar':True})
f = Foo()