代码之家  ›  专栏  ›  技术社区  ›  Jorge Arévalo

如何检查函数是否用特定的装饰器装饰?

  •  4
  • Jorge Arévalo  · 技术社区  · 7 年前

    我想检查Python函数是否经过修饰,并将decorator参数存储在函数dict中。这是我的代码:

    from functools import wraps
    
    def applies_to(segment="all"):
        def applies(func):
            @wraps(func)
            def wrapper(*args, **kwargs):
                func.func_dict["segment"] = segment
                print func.__name__
                print func.func_dict
                return func(*args, **kwargs)
            return wrapper
        return applies
    

    @applies_to(segment="mysegment")
    def foo():
        print "Some function"
    
    
    > foo() # --> Ok, I get the expected result
    foo
    {'segment': 'mysegment'}
    
    > foo.__dict__ # --> Here I get empty result. Why is the dict empty?
    {}
    
    1 回复  |  直到 2 年前
        1
  •  8
  •   Jorge Arévalo    7 年前

    user2357112

    from functools import wraps
    
    def applies_to(*segments):
        def applies(func):
            func.func_dict["segments"] = list(segments)
            @wraps(func)
            def wrapper(*args, **kwargs):
                return func(*args, **kwargs)
            return wrapper
        return applies
    

    谢谢