【发布时间】:2018-10-23 05:11:31
【问题描述】:
举个例子:
def decorator(func):
def nested(*args, **kwargs):
return func(*args, **kwargs)
return nested
@decorator
def decorated(): pass
有没有办法让被装饰的人知道它正在被装饰?
【问题讨论】:
-
为什么函数需要知道它正在被修饰?你想达到什么目的?
-
它可以检测到一些包装器(特别是使用
functools.wraps()的函数式包装器,它们通过添加到包装函数的指示属性,尤其是在 Python 3 中)。但是装饰器不需要添加包装器,如果有,包装器不需要是函数,如果是,它可能不会使用functools.wraps()。 -
简而言之,我遇到了一个问题,我查看了函数参数列表。当我遇到一个有效的函数时,可以说,装饰所述函数可能会导致问题。我应该澄清这是我正在开发的一个我担心的库的用例。
-
那你为什么不在装饰器中添加错误检查呢?为什么函数必须知道它正在被修饰?
-
因为我没有开发装饰器。已经解释了为什么它需要知道被装饰,参考上面的评论。