一:元类 metaclass
class Foo: pass f1=Foo() print(type(f1)) print(type(Foo)) #<class ‘type‘>类的类就是type
1、 什么是元类?
元类是类的类,是类的模板
元类是用来控制如何创建类的,正如类是创建对象的模板一样
元类的实例为类,正如类的实例为对象(f1对象是Foo类的一个实例,Foo类是 type 类的一个实例)
type是python的一个内建元类,用来直接控制生成类,python中任何class定义的类其实都是type类实例化的对象
2、 创建类的两种方式
方式一:
1 class Foo: 2 def func(self): 3 print(‘from func‘)
方式二:type 方式生成,type实例化的结果
1 def func(self): 2 print(‘from func‘) 3 x=1 4 Foo=type(‘Foo‘,(object,),{‘func‘:func,‘x‘:1})
3、自定制元类:
class Mytype(type): def __init__(self,a,b,c): print(‘元类的构造函数执行‘) # print(a) # print(b) # print(c) def __call__(self, *args, **kwargs): print(‘=============‘) obj=object.__new__(self) self.__init__(obj,*args, **kwargs) #Foo.__init__ return obj class Foo(metaclass=Mytype): #Mytype()4个参数=====》__init__ def __init__(self,name): self.name=name f1=Foo(‘laex‘) print(f1) print(f1.__dict__)
原文:http://www.cnblogs.com/xyd134/p/6580840.html