还有另一个使用类来实现装饰器,您也可以将参数传递给装饰器本身
这是一个记录器辅助装饰器的示例,您可以在它失败时传递函数范围和返回值
import logging
class LoggerHelper(object):
def __init__(self, scope, ret=False):
self.scope = scope
self.ret = ret
def __call__(self, original_function):
def inner_func(*args, **kwargs):
try:
logging.info(f"*** {self.scope} {original_function.__name__} Excuting ***")
return original_function(*args, **kwargs)
logging.info(f"*** {self.scope} {original_function.__name__} Executed Successfully ***")
except Exception as e:
logging.error(f"*** {self.scope} {original_function.__name__} Error: {str(e)} ***")
return self.ret
return inner_func
当您使用它时,您可以轻松跟踪引发异常的位置
class Example:
@LoggerHelper("Example", ret=False)
def method:
print(success)
return True