首页 > 解决方案 > 是否可以在运行时以编程方式装饰函数/方法?

问题描述

假设我有一个返回函数的 python 函数

def get_function():
    @some_decorator
    def some_function():
        // some code
    return some_function

相反,我想要类似的东西:

def get_function():
    @some_decorator
    def some_function():
        // some code

    if some_condition:
         return some_function                    # Return some_function() with @some_decorator
    else:
         return some_function_without_decorator  # Return some_function() without @some_decorator

标签: pythondecorator

解决方案


装饰器简单地返回它下面的函数,包裹着装饰器的函数。换句话说,这:

@some_decorator
def some_function():
    # some code

相当于:

some_function = some_decorator(some_function)

这意味着您可以通过编写以编程方式“装饰”该函数:

if some_condition:
    some_function = some_decorator(some_function)

推荐阅读