Python笔记:装饰器(面向切面) 在Python中可以很方便的使用装饰器实现简单的依赖注入。资料如下:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 顺便做了一个拦截器。可以注入前置函数。import functools funcs_config = {} class FuncInjectItem(object): def __init__(self): self.func = None self.args = () self.func_type = "simple" class FuncInfo(object): def __init__(self): self.args = None self.kwargs = None self.func = None def inject(some_func): @functools.wraps(some_func) def wrap(*args, **kwargs): if some_func.__name__ in funcs_config: before_funcs = funcs_config[some_func.__name__] for item in before_funcs: if item.func_type == "simple": item.func(*item.args) return some_func(*args, **kwargs) if item.func_type == "normal": func_info = FuncInfo() func_info.args = args func_info.kwargs = kwargs func_info.func = some_func item.func(func_info, *item.args) return func_info.func(*func_info.args, **func_info.kwargs) else: return some_func(*args, **kwargs) return wrap def __register(target, func, func_type, args): inject_item = FuncInjectItem() inject_item.func = func inject_item.args = args inject_item.func_type = func_type if target.__name__ in funcs_config: func_array = funcs_config[target.__name__] for item in func_array: if item.func.__name__ == func.__name__: print("func is already exist") return func_array.append(inject_item) else: func_array = [inject_item] funcs_config[target.__name__] = func_array def register(target, func, args): __register(target, func, "simple", args) def register_normal(target, func, args): __register(target, func, "normal", args) 来自 大脸猪 写于 2016-10-27 12:05 -- 更新于2020-10-19 13:06 -- 0 条评论