什么是元类(metaclass) 元类是类的类,是类的模板 元类的实例为类,正如类的实例为对象
所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象f1是调用Foo类得到的一个实例。 如果一切皆为对象,那么类Foo本质也是一个对象,既然所有的对象都是调用类得到的,那么Foo必然也是调用了一个类得到的,这个类称为元类。
Foo类是type类的一个实例。 用class关键字定义的类本身也是一个对象,负责产生该对象的类称之为元类(元类可以简称为类的类),内置的元类为type, type是Python的一个内建元类,用来直接控制生成类,Python中任何class定义的类其实都是type类实例化的对象。 class关键字在创建类时,必然帮调用了元类Foo=type(...),那调用type时传入的参数有三大组成部分,分别是 1、类名'Foo' 2、基类们(object, ) 3、类的名称空间class_dic,类的名称空间是执行类体代码而得到的 调用元类得到类Foo = type(class_name,class_bases,class_dic) 动态创建类 type可以动态的创建类。 type(类名, 由父类名称组成的元组,包含属性的字典)
动态添加Foo的属性与实例化行为:
自定义元类:
这样就限制了类的实例化,B所实例化的x,y只能是一百除非改变B类里面的x,y的值