![](/img/trans.png)
[英]Python C API: Call a Python function with argument(s) passed by reference
[英]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.