【发布时间】:2017-03-30 13:34:26
【问题描述】:
class Test(object):
def __init__(self, store):
assert isinstance(store, dict)
self.store = store
def __getitem__(self, key):
return self.store[key]
我尝试迭代这个类。在this doc 中说实现 __getitem__ 应该足以遍历我的 Test 类。事实上,当我尝试迭代它时,它并没有告诉我我不能,但我有一个 KeyError:
In [10]: a = Test({1:1,2:2})
In [11]: for i in a: print i
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-11-8c9c9a8afa41> in <module>()
----> 1 for i in a: print i
<ipython-input-9-17212ae08f42> in __getitem__(self, key)
4 self.store = store
5 def __getitem__(self, key):
----> 6 return self.store[key]
7
KeyError: 0
- 你知道这个 0 是从哪里来的吗?(幕后发生了什么)
我知道我可以通过添加 __iter__ 函数来解决它:
def __iter__(self):
return dict.__iter__(self.store)
- 这是解决这个问题的最佳方法吗?(我也可能继承自 dict 类)。
【问题讨论】:
-
解决什么问题的最佳方法,该类应该做什么?类只有
dict值?
标签: python dictionary iterator