簡體   English   中英

Python 調用 function 作為參數傳遞給 object

[英]Python call function passed as argument on object

有沒有辦法在 class 方法中將自定義 function 作為參數傳遞,並有一個 object 調用 ZC1C42145068E683945D 我正在編寫一個自定義記錄器,並想做這樣的事情

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 語句來確定要調用哪個日志記錄 function

更新:我發現記錄器有一個方法log()可以做我正在尋找的東西,但是一般其他對象呢?

是的,您絕對可以將可調用對象作為參數傳遞。 它看起來更像這樣(添加類型注釋以幫助澄清用法):

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

然后調用這個 function 你會做:

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

write function 只會調用您作為參數傳遞的任何 function 以及給定的message (在本例中self.logger.info )。 添加類型注釋在這里很有用,因為很容易混淆在哪個上下文中期望什么類型,但是 mypy 將幫助您保持一切正常——在這種情況下,類型注釋告訴我們,無論我們傳遞給write什么 function 都將被調用帶有一個str參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM