2012-02-24 115 views
4

我正在創建一個抽象數據類型,它創建一個雙向鏈表(不確定它是否是正確的翻譯)。在這個例子中,我創建了一個方法__len__來以正確的方式計算它的長度,__repr__方法可以正確表示它,但我現在不想創建一個方法,當用戶做出這樣的事情時:重新聲明類中的方法「in」

if foo in liste_adt 

將返回正確的答案,但我不知道要使用什麼,因爲__in__不起作用。

謝謝

回答

11

您是否在尋找__contains__

object.__contains__(self, item)

調用來實現成員資格測試的運營商。如果項目自我,否則返回false。對於映射對象,這應該考慮映射的鍵而不是值或鍵項對。

對於不限定__contains__()目的,成員檢測第一經由__iter__()嘗試迭代中,然後經由__getitem__()舊序列迭代協議,請參閱this section in the language reference

簡單的例子:

>>> class Bar: 
...  def __init__(self, iterable): 
...   self.list = list(iterable) 
...  def __contains__(self, item): 
...   return item in self.list 
>>>  
>>> b = Bar([1,2,3]) 
>>> b.list 
[1, 2, 3] 
>>> 4 in b 
False 
>>> 2 in b 
True 

注:通常當你有這種懷疑的引用可以在The Python Language ReferenceData Model部分找到。

+0

這正是我一直在尋找,謝謝,並感謝文檔鏈接,我在發佈問題之前尋找這個問題 – lpostula 2012-02-24 09:47:33

+1

@kasmanit:不客氣!這是我經常訪問的PLR的一部分。 *(我總是忘記什麼東西的實際名稱)* :) – 2012-02-24 09:56:02

1

由於數據結構是一個鏈表,因此有必要遍歷它來檢查成員資格。實施__iter__()方法將使if infor in工作。如果有更有效的檢查會員資格的方法,請在__contains__()中執行。