2011-04-05 35 views
4

我有一個期望包含XML文件的流的類。
我不一定需要一個文件流,我可能想使用其他來源,如數據庫,套接字等。
我需要從io module繼承哪些類以便從其他來源提供流接口?在Python中創建流類

+1

套接字已經具有與另一個文件相同的接口。數據庫連接通常提供一個「blob」,可以使用「StringIO」將其轉換爲文件行對象。爲什麼當你的「流」接口(即Python的''file')已經存在時,你會繼承某些東西?什麼是獨特的或不同的? – 2011-04-05 21:18:42

+0

爲什麼導出? Python不是C++。你確定只傳遞一個具有正確'read()'方法的東西是不夠的嗎? – 6502 2011-04-05 21:34:11

+0

@ 6502:可以將XML文件從數據庫加載到流中。我只是封裝行爲。 – 2011-04-06 07:04:29

回答

4

在這種情況下,動態類型允許您不從任何基類中繼承類。你應該使用專有名稱來實現一些方法。 Blog post on the subject

+0

我不明白爲什麼我不應該上課。無論如何,我的界面應該是流的界面。 – 2011-04-06 07:57:36

+0

我只寫過你不能使用繼承機制進行子類化,並可能創建你的類並實現具有所需簽名的方法是必要和充分的 – Andrey 2011-04-06 15:41:36

0

安德烈給出的答案並不完全正確。

在Python中,流是「類文件」對象。您可以使用io模塊中定義的工具讀取/寫入它們。如果你想定義一個流對象,該模塊還提供了你應該實現的接口。

請注意,io模塊區分三種不同類型的流,它們需要稍微不同的接口。 (他們在數據類型方面不同居多。)

  1. 文本I/O - 接口TextIOBase
  2. 二進制I/O - 接口BufferedIOBase
  3. 原始I/O - 接口RawIOBase

例如,StringIO是TextIOBase的內存中實現。

請注意,這些接口在Python 2和3上均可用。