首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 可呼叫類別實例作為 FTP 回調處理器:__call__ 魔術方法實戰

     編輯:更多程式設計知識

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)

運作原理

  1. Writer(FILENAME) 建立實例,開啟檔案準備寫入
  2. ftp.retrlines() 對每一行資料呼叫 writer(line)
  3. Python 解譯為 writer.__call__(line)
  4. __call__ 寫入檔案、列印、換行

優勢

  • 狀態封裝:檔案控制代碼、計數器、緩衝區等狀態內聚於實例
  • 介面統一:符合「可呼叫物件」協定,可替換任意函數參數
  • 可擴充:輕易加入進度顯示、錯誤處理、編碼轉換等邏輯

其他應用場景

  • sort(key=KeyExtractor()):自訂排序鍵提取器
  • threading.Thread(target=TaskRunner()):可呼叫任務物件
  • 裝飾器類別:@Timer() 記錄函數執行時間
  • 事件處理器:GUI 訊號槽、非同步回調
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved