【问题标题】:Detect Decorator in Python在 Python 中检测装饰器
【发布时间】:2011-04-01 15:31:59
【问题描述】:

在python中,是否可以检测另一个函数上是否有装饰器?

具体来说,我正在尝试(在 django 中)编写一些中间件,用于检测正在处理的视图是否已包装在 @login_required 装饰器中。

class SomeMiddleware(object):

    def process_view(self, request, view_func, view_args, view_kwargs):
        if has_decorator(view_func):
            print "this view was decorated"

我要填写的是“has_decorator”部分......

这可能吗?

【问题讨论】:

  • 这个问题的答案是个坏主意。不要自己编造应用装饰器的特殊魔法。
  • 感谢您的链接,但这并不是我想要的。我希望只有一些用于检测装饰器的 python 函数或属性。
  • 一般来说,几乎可以肯定不是。装饰器只是一个可调用的,它接受一些函数,并用一个新函数替换它。如果您对可能应用的装饰器有所了解,可以检查它们的效果。
  • 这就是我的发现......

标签: python django django-views


【解决方案1】:

只是在 shell 中的一些小玩意表明,函数的 func_closure 属性在未修饰的函数上是空的,但在修饰的函数中包含数据。不是 100% 肯定这一直都是真的,但也许这对你有用。

【讨论】:

  • 这很方便......最终返回给我的是一组“细胞”......虽然我很难与这些细胞交互。我似乎找不到如何从单元格中提取属性/方法的示例......有什么建议吗?
猜你喜欢
  • 2017-08-20
  • 1970-01-01
  • 2011-02-13
  • 2012-11-01
  • 1970-01-01
  • 2018-11-23
  • 2016-08-21
  • 2017-08-05
  • 2012-04-26
相关资源
最近更新 更多