Python 高階專用類方法的例項詳解

2022-09-28 06:24:11 字數 2085 閱讀 8059

python 高階專用類方法的例項詳解

除了 __getitem__ 和 __setitem__ 之外 python 還有更多的專用函式。某些可以讓你模擬出你甚至可能不知道的功能。下面的例子將展示 userdict 一些其他專用方法。

def __repr__(self): return repr(self.data) (1)

def __cmp__(self, dict): (2)

程式設計客棧 if isinstance(dict, userdict):

return cmp(self.data, dict.data)

else:

return cmp(self.data, dict)

def __len__(self): return len(self.data) (3)

def __delitem__(self, key): del self.data[key] (4)

(1)  __repr__ 是乙個專用的方法,在當呼叫 repr(instance) 時被呼叫。repr 函式是乙個內建函式,它返回乙個物件的字串表示。它可以用在任何物件上,不僅僅是類的例項。你已經對 repr 相當熟悉了,儘管你不知道它。在互動式視窗中,當你只敲入乙個變數名,接著按 enter,python 使用 repr 來顯示變數的值。自已用一些資料來建立乙個字典 d ,然後用 print repr(d) 來看一看吧。

(2)  __cmp__ 在比較類例項時被呼叫。通常,你可以通過使用 == 比較任意兩個 python 物件,不只是類例項。有一些規則,定義了何時內建資料型別被認為是相等的,例如,字典在有著全部相同的關鍵字和值時是相等的。對於類例項,你可以定義 __cmp__ 方法,自已編寫比較邏輯,然後你可以使用 == 來比較你的類,python 將會替你呼叫你的 __cmp__ 專用方法。

(3)  __len__ 在呼叫 len(instance) 時被呼叫。len 是乙個內建函式,可以返回乙個物件的長度。它可以用於任何被認為理應有長度的物件。字串的 len 是它的字元個數;字典的 len 是它的關鍵字的個數;列表或序列的 len 是元素的個數。對於類例項,定義 __len_程式設計客棧_ 方法,接著自已編寫長度的計算,然後呼叫 len(instance),python 將替你呼叫你的 __len__ 專用方法。

(4)  __delitem__ 在呼叫 del instance[key] 時呼叫 ,你可能記得它作為從字典中刪除單個元素的方法。當你在類例項中使用 del 時,python 替你呼叫 __delitem__ 專用方法。

note: python v s. j**a equality  and i dentity

在 j**a 中,通過使用 str1 == str2 可以確定兩個字串變數是否指向同一塊物理記憶體位置。這叫做物件同一性,在 python 中寫為 str1 is str2。在 j**a 中要比較兩個字串值,你要使用 str1.equals(str2);在 python 中,你要使用 str1 == str2。某些 j**a 程式設計師,他們已經被教授得認為,正是因為在 j**a 中 == 是通過同一性而不是值進行比較,所以世界才會更美好。這些人要接受 python 的這個「嚴重缺失」可能要花些時間。

在這個地方,你可能會想,「所有這些工作只是為了在類中做一些我可以對乙個內建資料型別所做的操作」。不錯,如果你能夠從像字典程式設計客棧一樣的內建資料型別進行繼承的話,事情就容易多了 (那樣整個 userdict 類將完全不需要了)。儘管你可以這樣做,專用方法仍然是有用的,因為它們可以用於任何的類,而不只是像 userdict 這樣的封裝類。

專用方法意味著任何類 可以像字典一樣儲存鍵-值對,只要定義 __setitem__ 方法。任何類可以表現得像乙個序列,只要定義 __getitem__ 方法。任何定義了 __cmp__ 方法的類可以用 == 進行比較。並且如果你的類表現為擁有類似長度的東西,不要定義 getlength 方法程式設計客棧,而定義 __len__ 方法,並使用 len(instance)。

note:

其它的物件導向語言僅讓你定義乙個物件的物理模型 (「這個物件有 getlength 方法」),而 python 的專用類方法像 __len__ 允許你定義乙個物件的邏輯模型 (「這個物件有乙個長度」)

Python 專用類方法

除了普通的類方法,python 類還可以定義專用方法。專用方法是在特殊情況下或當使用特別語法時由 python 替你呼叫的,而不是在 中直接呼叫 像普通的方法那樣 就像你在上一節所看到的,普通的方法對在類中封裝字典很有幫助。但是只有普通方法是不夠的,因為除了對字典呼叫方法之外,還有很多事情可以做的。...

Python類的專用方法

python 類可以定義專用方法,專用方法是在特殊情況下或當使用特別語法時由 python 替你呼叫的,而不是在 中直接呼叫 象普通的方法那樣 1 init 類似於建構函式 usr local bin python class study def init self,name none self.n...

Python類的專用方法

python 類可以定義專用方法,專用方法是在特殊情況下或當使用特別語法時由 python 替你呼叫的,而不是在 中直接呼叫 象普通的方法那樣 1 init 類似於建構函式 usr local bin python class study def init self,name none self.n...