一个类似于dict的python类

我想编写一个行为类似于dict的自定义类-因此,我继承了dict

不过,我的问题是:我是否需要在我的\uuu init\uuu()方法中创建一个私有dict成员?。我不明白这有什么意义,因为如果我只是从dict继承,我已经有了dict行为

有人能指出为什么大多数继承片段看起来像下面的那个吗

类自定义目录(dict):
定义初始化(自):
self.\u mydict={}
#其他方法如下

而不是更简单的

第二类自定义目录(dict):
定义初始化(自):
#在这里初始化我的其他东西。。。
#其他方法如下

实际上,我想我怀疑这个问题的答案是,用户无法直接访问您的词典(即,他们必须使用您提供的访问方法)

但是,阵列访问操作员如何处理?如何实现这一点?到目前为止,我还没有看到一个演示如何重写[]运算符的示例

因此,如果自定义类中没有提供[]访问函数,那么继承的基本方法将在不同的字典上运行

我尝试了以下代码片段来测试我对Python继承的理解:

类myDict(dict):
定义初始化(自):
self.\u dict={}
def添加(自身、id、val):
self._dict[id]=val
md=myDict()
md.add('id',123)
打印md[id]

我得到了以下错误:

KeyError:<内置函数id>

上面的代码有什么问题

如何更正类myDict,以便编写这样的代码

md=myDict()
md['id']=123

[编辑]

我编辑了上面的代码示例,以消除我在冲出办公桌之前犯的愚蠢错误。这是一个打字错误(我应该从错误信息中发现它)

类映射(dict):
定义设置项(自身、键、项):
self.\uuuu dict\uuuu[key]=项目
def _u获取项目(自身,密钥):
返回self.\uuuu dict\uuuu[key]
定义报告(自我):
返回报告(自我记录)
定义(自我):
返回len(self.\u dict\u)
def uu delitem uu(self,key):
删除self.\uuuu dict\uuuuu[键]
def清除(自):
返回self.\uuuu dict\uuuuu.clear()
def副本(自我):
返回self.\u dict\u.copy()
def具有_键(self,k):
在self中返回k__
def更新(自我、*args、**kwargs):
返回自我记录更新(*args,**kwargs)
def键(自):
返回self.\u dict\u.keys()
def值(自身):
返回self.\u dict\u.values()
def项目(自身):
返回self.\u dict\u.items()
def pop(自身,*参数):
返回self.\u dict\u.pop(*args)
定义cmp(自我、指令):
返回self.\u cmp.\u(self.\u dict,dict)
定义包含(自身,项目):
自行返回项目__
定义(自我):
返回iter(自行记录)
def ___; unicode(自):
返回unicode(报告(自我记录)
o=映射()
o、 foo=“bar”
o[‘lumberjack’]=’foo’
o、 更新({‘a’:’b’},c=44)
在o中打印“伐木工”
打印o
At[187]on:运行mapping.py
符合事实的
{‘a’:’b’,’lumberjack’:’foo’,’foo’:’bar’,’c’:44}

发表评论