gpt4 book ai didi

python - 我可以根据条款使用装饰器吗?

转载 作者:行者123 更新时间:2023-11-28 22:10:20 25 4
gpt4 key购买 nike

我有自己的 Python 库。我使用它的装饰器 @send_transport

@send_transport(program_version=__version__, entity=1)
def post(self):
pass

我可以实现这样的东西吗?

try:
from spo_client import send_transport
except ImportError:
pass
else:
@send_transport(program_version=__version__, entity=1)
def post(self):
pass

最佳答案

为了实现你的目标,你可以这样做

try:
from spo_client import send_transport
decorator = send_transport(program_version=__version__, entity=1)
except ImportError:
decorator = lambda f: f

@decorator
def post(self):
pass

这会创建“正确的”装饰器或将函数转换为自身的虚拟对象,即。 e.别管它。

另一种选择是定义一个虚拟的 send_transport 函数:

def dummy_send_transport(*a, **k):
return lambda f: f

try:
from spo_client import send_transport
except ImportError:
send_transport = dummy_send_transport
# or just send_transport = lambda *a, **k: lambda f: f
# but then the code would be less self-documenting.

@send_transport(program_version=__version__, entity=1)
def post(self):
pass

在这种情况下,在导入错误时,send_transport() 被替换为仅返回 NOP 装饰器的版本,但可以称为其“原始版本”。在这里,您可以在代码中调用多个不同的 send_transport,而不必为它们预定义变量。

关于python - 我可以根据条款使用装饰器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56899581/

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