python带有参数的装饰器

def type_inspect(*ty_args, **ty_kwargs):
    def decorator(func):
        func_sig = inspect.Signature(func)
        ba = func_sig.bind_partial(*ty_args, **ty_kwargs)
        type_dict = ba.arguments

        def wrap(*args, **kwargs):
            for name, obj in func_sig.bind(*args, **kwargs).arguments.items():
                type_ = type_dict.get(name)
                if not isinstance(obj, type_):
                    raise TypeError('%s must be %s' % (name, type_))
            return func(*args, **kwargs)

        return wrap

    return decorator


if __name__ == '__main__':
    @type_inspect(int, list, str)
    def f(a, b, c):
        pass

我写了一个type_inspect函数,功能就是生产装饰器,并且给装饰器修饰的函数检查数据类型

运行了一下报错:
image.png

怎么修改呢?谢谢

阅读 2.7k
1 个回答
func_sig = inspect.Signature(func)

Signature改为signature

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题