通常在实际应用中有人写的框架中包含了一个回调函数,需要我们传入一个函数作为参数(这种方式不是面向切面的编程,这个我们暂且不论框架设计的问题),回调函数是不带参数的,但我们开发的函数由于复用的需要设计了函数参数,那么问题来了,如何把我们设计的函数传给框架中作为回调呢?
框架代码如下:
class Framework:
def __init__(self, callback):
self.callback = callback
def run(self):
self.setup()
# 框架中并未对回调函数传参数
self.callback()
self.teardown()
def setup(self):
pass
def teardown(self):
pass
我们设计的函数是带参数的,比如
def your_function(level, message):
print(level, message)
这样我们需要为重新定义函数来满足框架中的回调吗?怎么做?
- 使用闭包
# 方法一 使用闭包
def configured_wrapper_logger(level, message):
def _configured_logger():
your_function(level, message)
return _configured_logger
- 使用lambda
# 方法二,使用lambda
configured_lambda_logger = lambda: your_function(logging.ERROR, "ERROR logger")
- 使用class的call
# 方法三 使用class __call__
class ConfiguredLogger:
def __init__(self, level, msg):
self.level = level
self.msg = msg
def __call__(self):
your_function(self.level, self.msg)
这三种方式都可以复用自定义函数的前提下,方便的传递给框架
网友评论