meta class 和 類裝飾器的執行順序

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__

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章