我想编写一个行为类似的自定义类dict
-因此,我继承自dict
。
不过,我的问题是:我需要dict
在我的__init__()
方法中创建一个私有成员吗?我不明白这一点,因为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
[编辑]
我已经编辑了上面的代码示例,以摆脱在离开办公桌前犯下的愚蠢错误。这是一个错字(我应该从错误消息中发现它)。
dict
,则应该使用对象本身(使用super
),而不是简单地委派给实例的__dict__
,这实际上意味着您要为每个实例创建两个字典。