类默认是由 type 类实例化产生,type类中如何实现的创建类?类又是如何创建对象?
答:类中有一个属性 __metaclass__,其用来表示该类由 谁 来实例化创建,所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看 类 创建的过程。
class MyType(type): def __init__(self,what,bases=None,dict=None): print("--MyType init--") super(MyType,self).__init__(what,bases,dict) def __call__(self, *args, **kwargs): print("--MyType init--") obj = self.__new__(self,*args, **kwargs) self.__init__(obj,*args, **kwargs) class Foo(object): __metaclass__ = MyType#此两行可写成class Foo(object,metaclass=MyType): def __init__(self,name): self.name = name print("Foo --init__") def __new__(cls, *args, **kwargs):#__new__是用来创建实例的(尽量不用),调用__init__(先于__init__执行) print("Foo --new--",cls, *args, **kwargs) return object.__new__(cls)#继承父类的__new__方法 #第一阶段:解释器从上到下执行代码创建Foo类 #第二阶段:通过Foo类创建obj对象 obj = Foo("Alex") print(obj.name) # 自定义元类
上述代码在python2中效果可看出
结果:
类的生成 调用 顺序依次是 __new__ --> __init__ --> __call__
http://www.cnblogs.com/alex3714/articles/5213184.html
metaclass 详解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 得票最高那个答案写的非常好