2011-10-30 77 views
30

我想創建一個新類,它充當對象的特殊類型的容器,並且可以使用方括號進行訪問。創建一個可以用方括號訪問的python對象

例如,假設我有一個名爲ListWrapper的類。假設objListWrapper。當我說obj[0]時,我期望方法obj.access()以0作爲參數被調用。然後,我可以返回任何我想要的。這可能嗎?

回答

45

您想要定義特殊的__getitem__[docs]方法。

class Test(object):  
    def __getitem__(self, arg): 
     return str(arg)*3 

test = Test() 

print test[0] 
print test['kitten'] 

結果:

 
000 
kittenkittenkitten 
+0

優秀的答案:點,包括文檔鏈接和簡單的解決例子。 –

+0

謝謝!我知道我需要定義一些方法來實現此功能,但我不確定該方法的名稱是什麼。 – Ord

+0

嗯...不應該「簡單的解決例子」包括'return some_expression'? –

7

Python的標準對象有一系列名爲__something__方法,其中大部分被用於允許您創建掛鉤到在語言的API對象。例如,__getitem____setitem__是要求用[]表示法獲取或設置值的方法。下面是一個如何創建類似於Python字典的子類的示例:https://github.com/wavetossed/mcdict

請注意,它實際上並沒有將字典子類化,並且它還有一個update方法。如果你想讓你的類適當僞裝成一個Python字典,這兩個都是必須的。

相關問題