Python调用函数作为对象上的参数传递

2024-04-20 07:40:54 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以将自定义函数作为类方法中的参数传递,并让对象调用该函数?我正在编写一个自定义记录器,并希望执行类似的操作

class Logger:
    def __init__(self, ...):
        self.logger = logging.getLogger('name')
        ...

    def write(self, writeFunction, message):
        self.logger.writeFunction(message)  # something like this
        self.logger.call(writeFunction, args=[message])  # or something like this in other languages

其中writeFunction类似于info()debug()等等(我知道上面的例子在python中是不允许的)

尽量避免将日志级别作为参数传递,并执行一系列if语句来确定要调用哪个日志函数

更新:我发现日志记录器有一个方法log(),它完成了我所寻找的,但是一般来说其他对象呢


Tags: 对象方法函数selfmessageinitdeflogger
1条回答
网友
1楼 · 发布于 2024-04-20 07:40:54

是的,您完全可以将callable作为参数传递。它看起来更像这样(添加类型注释以帮助澄清用法):

    def write(self, write_function: Callable[[str], None], message: str):
        write_function(message)

然后要调用此函数,您需要执行以下操作:

    write(self.logger.info, "my message")

write函数将只调用作为参数传递的任何函数(在本例中为self.logger.info),并使用给定的message。在这里添加类型注释很有用,因为很容易混淆在哪个上下文中需要什么类型,但是mypy将帮助您保持通畅。在这种情况下,类型注释告诉我们传递给write的任何函数都将使用单个str参数调用

相关问题 更多 >