2011-10-06 94 views
1

我在讀'潛入Python',下面的例子給出了每一行的解釋,但我仍然無法解釋意義。有人可以在數字1和2上多說一些嗎?當它開始說明這個包裝類的基本技術時,我不明白#1 ...等等。#2我完全不理解它。請協助和教育。UserDict普通方法說明

例5.10。 UserDict正常方法

def clear(self): self.data.clear() ❶ 
def copy(self): ❷ 
if self.__class__ is UserDict: ❸ 
return UserDict(self.data) 
import copy ❹ 
return copy.copy(self) 
def keys(self): return self.data.keys() ❺ 
def items(self): return self.data.items() 
def values(self): return self.data.values() 

❶clear是一個普通的類方法;它是公開可供任何人隨時調用的。注意 明確,像所有的類方法,有自己作爲第一個參數。 (請記住,當您調用方法時,不包含 self;它是Python爲您添加的東西。)還要注意此包裝類的基本技巧 :將實際字典(數據)存儲爲數據屬性,定義全部實際字典所具有的方法,並將每個類方法重定向到實際字典上的相應方法。 (如果您忘記了,字典的清除方法將刪除其所有密鑰及其關聯的值。) ❷真實字典的複製方法返回與原始 (完全相同鍵值對)。但是UserDict不能簡單地重定向到self.data.copy,因爲 方法返回一個真正的字典,並且你想要的是返回一個與自己相同的類 的新實例。

回答

0

至於點1.它只是回憶的包裝類的基本知識......恕我直言明確方法的文檔塊是不是真的回想起這些基本知識的最佳場所....

由於。當調用對象的複製方法時,您的目標是複製您的實例,而不是實例中的數據存儲(上例中的'self.data')

self.data.copy複製數據存儲:您仍然沒有您的UserDict實例的副本...

但我不知道代碼中是否沒有錯誤摘錄:「return UserDict(sel f.data)「 - >這會在數據存儲的SAME上創建新實例? 如果我沒有錯,這將是正確的調用「返回UserDict(self.data.copy())」....