gpt4 book ai didi

python - 装饰器作为类

转载 作者:行者123 更新时间:2023-12-01 01:36:25 25 4
gpt4 key购买 nike

尝试将装饰器重写为 Class 无法按预期工作。我实际的装饰器是:

def check(callback):
def decorator(function):
def wrapper(*args, **kwargs):
result = function(*args, **kwargs)
cb_result = callback()
return result
return wrapper
return decorator

我的类(class)格式方法是

class Check(object):
def __init__(self, *args, **kwargs):
self._args = args
self._kwargs = kwargs

def __call__(self, *call_args, **call_kwargs):
function = call_args[0]
return self.__param__call__(function)

def __param__call__(self, function):
def wrapper(*args, **kwargs):
result = function(*args, **kwargs)
cb_result = callback()
return result
return wrapper

我希望使用装饰器,如下所示:

@Check(callback=a_function_callback)
def my_function():
...

将其重写为类时我犯了什么错误,我也一直在努力保持向后兼容性(又名 Python 2.7 合规性)。

最佳答案

您应该接受 callback 作为 Check 类的 __init__ 方法中的参数,以便您的 wrapper函数实际上可以将其作为回调函数引用:

class Check(object):
def __init__(self, callback):
self.callback = callback

def __call__(self, func):
return self.__param__call__(func)

def __param__call__(self, func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
cb_result = self.callback()
return result
return wrapper

关于python - 装饰器作为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52360397/

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