自定义元类来创建类
python中的类也是对象,是type类的对象
在编译器运行到class Foo的时候自动运行Foo = type(‘Foo‘,{object,},{})来创建类对象并放入内存中
下面的例子展示了实例创建的过程
1 class MyType(type): 2 def __init__(self, *args,**kwargs): 3 type.__init__(self,*args,**kwargs) 4 print(‘第一步:解释器执行到class Foo时,创建Foo类对象‘) 5 def __call__(self, *args, **kwargs): 6 print(‘第二步:foo = Foo("foo")时调用元类的__call__方法,在此方法中创建实例‘) 7 #foo = Foo("foo") = MyType(‘Foo‘,(object,),{})() 8 obj = self.__new__(self) 9 print(‘第四步:实例创建完毕,执行实例的__init__方法‘) 10 self.__init__(obj, *args, **kwargs) 11 #返回实例,在外部赋值给foo 12 return obj 13 14 class Foo(object,metaclass=MyType): 15 def __init__(self,name): 16 self.name = name 17 def __new__(cls, *args, **kwargs): 18 print(‘第三步:返回实例‘) 19 return object.__new__(cls) 20 # 第一阶段:解释器从上到下执行代码创建Foo类 21 # 第二阶段:通过Foo类创建obj对象 22 foo = Foo(‘foo‘) 23 print(foo) 24 print(foo.name)