我想創建一個新類,它充當對象的特殊類型的容器,並且可以使用方括號進行訪問。創建一個可以用方括號訪問的python對象
例如,假設我有一個名爲ListWrapper
的類。假設obj
是ListWrapper
。當我說obj[0]
時,我期望方法obj.access()
以0作爲參數被調用。然後,我可以返回任何我想要的。這可能嗎?
我想創建一個新類,它充當對象的特殊類型的容器,並且可以使用方括號進行訪問。創建一個可以用方括號訪問的python對象
例如,假設我有一個名爲ListWrapper
的類。假設obj
是ListWrapper
。當我說obj[0]
時,我期望方法obj.access()
以0作爲參數被調用。然後,我可以返回任何我想要的。這可能嗎?
您想要定義特殊的__getitem__
[docs]方法。
class Test(object):
def __getitem__(self, arg):
return str(arg)*3
test = Test()
print test[0]
print test['kitten']
結果:
000 kittenkittenkitten
Python的標準對象有一系列名爲__something__
方法,其中大部分被用於允許您創建掛鉤到在語言的API對象。例如,__getitem__
和__setitem__
是要求用[]
表示法獲取或設置值的方法。下面是一個如何創建類似於Python字典的子類的示例:https://github.com/wavetossed/mcdict
請注意,它實際上並沒有將字典子類化,並且它還有一個update
方法。如果你想讓你的類適當僞裝成一個Python字典,這兩個都是必須的。
優秀的答案:點,包括文檔鏈接和簡單的解決例子。 –
謝謝!我知道我需要定義一些方法來實現此功能,但我不確定該方法的名稱是什麼。 – Ord
嗯...不應該「簡單的解決例子」包括'return some_expression'? –