python带有参数的装饰器

发布于 2022-09-12 00:47:39 字数 830 浏览 31 评论 0

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

怎么修改呢?谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怪我入戏太深 2022-09-19 00:47:39
func_sig = inspect.Signature(func)

Signature改为signature

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文