【发布时间】:2015-05-15 23:53:49
【问题描述】:
在定义的对象中,一些值保存在dict 中,我想在引用普通dict 时迭代dict 中的内容,因此可以使用[] 直接访问,并且使用例如循环.items()。代码结构为:
class Klass:
def __init__(self, values):
self.values = values
self.more = None
def __getitem__(self, name):
return self.values[name]
def __iter__(self):
pass # TBD[How to make this ?]
d = {'alfa': 1, 'bravo': 2, 'charlie': 3}
k = Klass(d)
for key in k:
print(key) # Expected to print keys from self.values
for (key, value) in k.items():
print(key, value) # Expected to print key and value from self.values
for key in k.keys():
print(key) # Expected to print key from self.values
for value in k.values():
print(value) # Expected to print value from self.values
如何编写__iter__ 和其他必需的方法,以便通过Klass 的实例进行这种访问?
【问题讨论】:
-
for item in self.values: yield item? -
OOP 的意图是隐藏具体的实现,所以应该避免直接引用实例属性
.values.. -
@EquipDev:在实现中你仍然必须依赖你自己的状态。
Torxed提出了__iter__的实现,使其成为生成器函数。不过这里不需要,iter()不需要。 -
@MartijnPieters:现在我明白了;是的,这符合 OOP 原则。感谢您指出这一点。
标签: python python-3.x dictionary iterator