Python 類別實例實作 __call__ 方法即成為可呼叫物件,可直接傳遞給接受回調函數的 API。本文示範以類別封裝檔案寫入邏輯,作為 ftplib.FTP.retrlines() 的回調處理器。
class Writer:
def __init__(self, file):
self.f = open(file, "w")
def __call__(self, data):
self.f.write(data)
self.f.write('\n')
print data
FILENAME = "AutoIndent.py"
writer = Writer(FILENAME)
import ftplib
ftp = ftplib.FTP('127.0.0.1', 'book', 'bookpw')
ftp.retrlines("RETR %s" % FILENAME, writer)
Writer(FILENAME) 建立實例,開啟檔案準備寫入ftp.retrlines() 對每一行資料呼叫 writer(line)writer.__call__(line)__call__ 寫入檔案、列印、換行sort(key=KeyExtractor()):自訂排序鍵提取器threading.Thread(target=TaskRunner()):可呼叫任務物件@Timer() 記錄函數執行時間