gpt4 book ai didi

python - 如何用一个替换多个Python装饰器?

转载 作者:行者123 更新时间:2023-12-02 03:35:38 25 4
gpt4 key购买 nike

我有许多使用相同装饰器的函数。有没有一种方法可以将所有这些功能放在一起,然后在所有功能中应用一个?

最佳答案

我花了一段时间,但我已经弄清楚了。这是一个例子:

import click

@click.group()
def cli():
pass

@cli.command()
@click.option('--number', help='Integer number')
@click.option('--letter', help='Single character')
def show(number, letter):
print "number {} and letter {}".format(number, letter)

@cli.command()
@click.option('--number', help='Integer number')
@click.option('--letter', help='Single character')
def flip(number, letter):
print "flipped number {} and letter {}".format(-int(number), letter.swapcase())

if __name__ == '__main__':
cli()

您可以使用一个装饰器来装饰所有命令,该装饰器将应用所有其他命令,如下所示:

import click, functools

def the_one(f):
@cli.command()
@click.option('--number', help='Integer number')
@click.option('--letter', help='Single character')
@functools.wraps(f)
def wrapper(*args, **kwds):
return f(*args, **kwds)
return wrapper

@click.group()
def cli():
pass

@the_one
def show(number, letter):
print "number {} and letter {}".format(number, letter)

@the_one
def flip(number, letter):
print "flipped number {} and letter {}".format(-int(number), letter.swapcase())

if __name__ == '__main__':
cli()

这是在行动:

$ python example.py flip --number 2 --letter B
flipped number -2 and letter b

关于python - 如何用一个替换多个Python装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50302852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com