Python,装饰器作为参数

时间:2018-03-05 10:16:53

标签: python python-3.x decorator

我想制作一个装饰器,它将另一个装饰器函数作为参数。

装饰师会做额外的工作。

def raise_error(func):
    def wrapper(*args, **kwargs):
        print('hello from decorator')
        return func(*args, **kwargs)
    return wrapper


@raise_error
def hello():
    return 'Hellom from function'


print(hello())

从技术上讲,我可以在raise_error装饰器内写一个装饰器,它将是take,boost_error装饰器,并做一些额外的流程?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

你在谈论多个装饰者吗?

喜欢这个

def raise_error(func):
    def wrapper(*args, **kwargs):
        print('hello from decorator')
        return func(*args, **kwargs)
    return wrapper


def foo(func):
    def wrapper(*args, **kwargs):
        print('bar')
        return func(*args, **kwargs)
    return wrapper


@foo
@raise_error
def hello():
    return 'Hello from function'


print(hello())

相关问题:How to make a chain of function decorators?

答案 1 :(得分:0)

将func作为装饰器的参数的另一种可能性。

def raise_error(func):
    def wrapper(*args, **kwargs):
        test_func = getattr(func, 'tester', None)
        test_func()
        print('Hello from decorator')
        return func(*args, **kwargs)
    return wrapper


def test():
    print('Hello from test')


def hello():
    print('Hello from function')
    return 'Hello from function'
hello.tester = test


decorated_hello = raise_error(hello)
decorated_hello()

结果:

Hello from test
Hello from decorator
Hello from function