meta class 和类装饰器的执行顺序
先执行decorator,后执行metaclass
程序是从上到下执行,先遇到decorator,后遇到class,创建class 调用metaclass.
同理,装饰器也是先执行上面的后执行下面的,所以如果@property
和别的装饰器共同装饰一个方法,一定要将@property
放到最上面
def deco(function):
print 'i am in deco'
return function
class MetaClass(type):
def __init__(cls, name, bases, attr):
print 'i am in MetaClass __init__'
def __new__(meta, cls_str, cls, args_dict):
print 'i am in MetaClass __new__'
return super(MetaClass, meta).__new__(meta, cls_str, cls, args_dict)
def __call__(cls, *args, **kwargs):
print 'i am in MetaClass __meta__'
self = cls.__new__(cls, *args, **kwargs)
return self
class Home(object):
__metaclass__ = MetaClass
@deco
def index(self):
print 'i am in index'
Home()
# i am in deco
# i am in MetaClass __new__
# i am in MetaClass __init__
# i am in MetaClass __meta__