假设我有以下内容:
def with_connection(f):
def decorated(*args, **kwargs):
f(get_connection(...), *args, **kwargs)
return decorated
@with_connection
def spam(connection):
# Do something
我想测试
spam
函数,而无需经历设置连接的麻烦(或装饰器正在做的任何事情)。给定
spam
,如何从中剥离装饰器并获得底层的“未装饰”功能? 最佳答案
在一般情况下,你不能,因为
@with_connection
def spam(connection):
# Do something
相当于
def spam(connection):
# Do something
spam = with_connection(spam)
这意味着“原始”垃圾邮件甚至可能不再存在。一个(不太漂亮的)hack 是这样的:
def with_connection(f):
def decorated(*args, **kwargs):
f(get_connection(...), *args, **kwargs)
decorated._original = f
return decorated
@with_connection
def spam(connection):
# Do something
spam._original(testcon) # calls the undecorated function
关于python - 如何从 Python 中的函数中去除装饰器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1166118/