我想寫一個自定義類,其行爲類似於dict
--所以我從dict
繼承。一個類似字典的python類
但我的問題是:我是否需要在我的__init__()
方法中創建私人dict
成員?我沒有看到這一點,因爲我已經有dict
行爲,如果我只是從dict
繼承。
任何人都可以指出爲什麼大部分繼承片段看起來像下面那樣?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
取而代之的是更簡單...
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
其實,我覺得我懷疑這個問題的答案是,使用戶可以直接訪問不是你的字典(即它們必須使用訪問方法你提供的)。
但是,怎麼樣的數組訪問運算符[]
?如何實現呢?到目前爲止,我還沒有看到一個示例說明如何覆蓋[]
運算符。
因此,如果在自定義類中未提供[]
訪問函數,繼承的基本方法將在不同的字典上運行?
我嘗試下面的代碼片段來測試我的Python繼承的理解:
class myDict(dict):
def __init__(self):
self._dict = {}
def add(self, id, val):
self._dict[id] = val
md = myDict()
md.add('id', 123)
print md[id]
我得到了以下錯誤:
KeyError: < built-in function id>
什麼是錯上面的代碼?
如何更正類myDict
以便我可以編寫這樣的代碼?
md = myDict()
md['id'] = 123
[編輯]
我已編輯的代碼示例上述擺脫之前我虛線從我的辦公桌前我做了愚蠢的錯誤。這是一個錯字(我應該從錯誤信息中發現它)。
我經常被稱爲「行爲像字典的程序員。 – 2010-10-25 12:44:53
可能重複[Python:如何「完美」重寫一個字典](http://stackoverflow.com/questions/3387691/python-how-to-perfectly-override-a-dict) – 2015-01-06 21:57:04