**************************** 装饰器 **************************** 函数修饰器 ============================ 修饰带有返回值的函数 ---------------------------- 修改返回值:: def w_test(func): def inner(): print('w_test inner called start') str = func() print('w_test inner called end') return str.lower() return inner @w_test def test(): print('this is test fun') return 'HELLO' ret = test() print('ret value is %s' % ret) 装饰器带参数,函数不带参数:: def func_args(pre='xiaoqiang'): def w_test_log(func): def inner(): print('...记录日志...visitor is %s' % pre) func() return inner return w_test_log # 带有参数的装饰器能够起到在运行时,有不同的功能 # 先执行func_args('wangcai'),返回w_test_log函数的引用 # @w_test_log # 使用@w_test_log对test_log进行装饰 @func_args('wangcai') def test_log(): print('this is test log') test_log() 修饰类 ------------------------------ .. code-block:: python def register(): def _mock_wrapper(_class): return _class return _mock_wrapper class A: def __init__(self): pass def q(self): print(333) @classmethod def t(cls): print(1111) @register() # 必须带括号,不带括号是当作函数使用 class B(A): def t2(self): print(2222) 用类方法的装饰器 ================================================ .. code-block:: class Docker: subcommands = [] @classmethod def subcommand(cls, sub_class): cls.subcommands.append(sub_class) del sub_class @Docker.subcommand class Search: ...