Python构造一个带参数的装饰器类
代码定义了一个用于检测参数类型的Python装饰器类,装饰器可以检测传递给函数的参数是否正确,如果不正确则函数调用会失败,并报告参数错误的信息。
""" 皮蛋编程(https://www.pidancode.com) 创建日期:2022/4/6 功能描述:Python构造一个带参数的装饰器类 """ import functools # 构建带参数的装饰器类 class ParamCheck(object): def __init__(self, *types, **kwtypes): self.types = types self.kwtypes = kwtypes return def __call__(self, func): @functools.wraps(func) def _inner(*args, **kwargs): result = [isinstance(_param, _type) for _param, _type in zip(args, self.types)] assert all(result), "参数检查: invalid parameters" result = [isinstance(kwargs[_param], self.kwtypes[_param]) for _param in kwargs if _param in self.kwtypes] assert all(result), "参数检查: invalid parameters" return func(*args, **kwargs) return _inner # 使用装饰器 @ParamCheck(int, str, (list, tuple)) def test_func(a, b, c): print("test_func: a=%s, b=%s, c=%s" % (a, b, c)) return 1 test_func(1, '2', ([1, 2, 3], (1, 2)))
输出:
test_func: a=1, b=2, c=([1, 2, 3], (1, 2))
如果有某个参数的数据类型不对,则会提示相关报错信息。
代码在Python3.9下测试通过。
相关文章