扩展1, 接收参数
# coding=utf-8
MOVE_FUNC_DICT = {}
# 相当于一个函数执行, 并返回一个decorator
# 只会初始化的时候执行一次
def register_func(move_type):
def _inner(fun):
MOVE_FUNC_DICT[move_type] = fun
return fun
return _inner
def decorator(func):
def __inner(*args, **kwargs):
print '修饰'
func(*args, **kwargs)
return __inner
class Test(object):
def run(self):
import random
while True:
MOVE_FUNC_DICT[random.randint(0, 2)](self)
# self.move_a()
@register_func(0)
def move_a(self):
print 'a'
@register_func(1)
def move_b(self):
print 'b'
@register_func(2)
def move_c(self):
print 'c'
if __name__ == '__main__':
t = Test()
t.run()
扩展2,修饰类
def Components(*args, **kwargs):
def _inner(kclass):
kclass.init_dict(*args, **kwargs)
return kclass
return _inner
@Components({1: '1'})
class A(object):
test = None
def __init__(self):
pass
@classmethod
def init_dict(cls, _dict):
cls.test = _dict
a = A()
print a.__class__.test
- 没有参数, 2就是在3基础上包了一层
def counter(cls):
obj_list = []
def wrapper(*args, **kwargs):
new_obj = cls(*args, **kwargs)
obj_list.append(new_obj)
print "class:%s'object number is %d" % (cls.__name__, len(obj_list))
return new_obj
return wrapper
@counter
class my_cls(object):
STATIC_MEM = 'This is a static member of my_cls'
def __init__(self, *args, **kwargs):
print self, args, kwargs
print my_cls.STATIC_MEM
c = my_cls()