我想编写一个类,其行为与dict
相似 - 因此,我正在从dict
继承。
我的问题是:我需要在__init__()
方法中创建一个私有的dict
成员吗?我不明白这样做的意义,因为如果我简单地继承dict
,我已经拥有了dict
的行为。
有人可以解释一下为什么大多数继承片段看起来像下面的代码吗?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
与其使用简单的 setTimeout
,更好的方式是使用 requestAnimationFrame
来制作动画。这可以帮助你避免在更新过程中出现性能问题。
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
[编辑]
我已经编辑了上面的代码示例,摆脱了之前从桌子旁边匆忙离开时犯的愚蠢错误。这是一个打字错误(我应该从错误消息中看出来的)。
dict
的子类,那么你应该使用对象本身(使用super
),而不是简单地委托给实例的__dict__
- 这实质上意味着你为每个实例创建了两个字典。 - Russia Must Remove Putin__dict__
属性,其中包含所有对象属性(方法,字段等)。除非你想编写修改自身代码的代码,否则不应该随意更改它。 - Raik