Python MetaClass

    metaclass的原理其实是这样的:当定义好类之后,创建类的时候其实是调用了type的__new__方法为这个类分配内存空间,创建好了之后再调用type的__init__方法初始化(做一些赋值等)。所以metaclass的所有magic其实就在于这个__new__方法里面了。

    说说这个方法:__new__(cls, name, bases, attrs)

    cls: 将要创建的类,类似与self,但是self指向的是instance,而这里cls指向的是class

    name: 类的名字,也就是我们通常用类名.__name__获取的。

    bases: 基类

    attrs: 属性的dict。dict的内容可以是变量(类属性),也可以是函数(类方法)。

 

  看一个简单例子:

 

from time import ctime
class MetaC(type):
    def __init__(cls,name,bases,attrd):
        super(MetaC,cls).__init__(name,bases,attrd);
        print "created class %r at %s" % (name,ctime());

class Foo(object):
    __metaclass__=MetaC
    def __init__(self):
        print "instanitiated class %r at :%s" % (self.__class__.__name__,ctime());
        

f=Foo();

 其中MetaC的init方法其实调用的是:

class type(object) 
    type(object) -> the object's type
type(name, bases, dict) -> a new type
 

 

这里的第二个方法。

 

你可能感兴趣的:(python,F#)