如何从Python中的函数中剥离装饰器

如何从Python中的函数中剥离装饰器,第1张

概述假设我有以下内容: def with_connection(f): def decorated(*args, **kwargs): f(get_connection(...), *args, **kwargs) return decorated@with_connectiondef spam(connection): # Do something 我想 假设我有以下内容:

def with_connection(f):    def decorated(*args,**kwargs):        f(get_connection(...),*args,**kwargs)    return decorated@with_connectiondef spam(connection):    # Do something

我想测试垃圾邮件功能,而不必经历设置连接的麻烦(或者装饰者正在做的任何事情).

鉴于垃圾邮件,如何从中删除装饰器并获得底层的“未修饰”功能?

解决方法 在一般情况下,你不能,因为

@with_connectiondef spam(connection):    # Do something

相当于

def spam(connection):    # Do somethingspam = with_connection(spam)

这意味着“原始”垃圾邮件可能甚至不再存在.一个(不太漂亮)黑客将是这样的:

def with_connection(f):    def decorated(*args,**kwargs)    decorated._original = f    return decorated@with_connectiondef spam(connection):    # Do somethingspam._original(testcon) # calls the undecorated function
总结

以上是内存溢出为你收集整理的如何从Python中的函数剥离装饰器全部内容,希望文章能够帮你解决如何从Python中的函数中剥离装饰器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存