最佳答案
我想编写一个行为类似于 dict
的自定义类-因此,我从 dict
继承。
但是,我的问题是: 是否需要在 __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: < 内置函数 id >
上面的代码有什么问题吗?
我如何更正类 myDict
,以便我可以编写这样的代码?
md = myDict()
md['id'] = 123
[编辑]
我已经编辑了上面的代码示例,以消除在离开办公桌之前出现的愚蠢错误。这是一个输入错误(我应该从错误消息中发现它)。