在一個已定義的對象中,一些值保存在dict
中,我希望迭代該dict
中的內容,就像引用一個普通的dict
一樣,因此可以直接使用[]
進行訪問,並使用例如循環使用。 .items()
。代碼結構爲:如何在類中迭代`dict`就好像只是提到`dict`一樣?
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__
和其他必要的方法,所以這種訪問有可能通過克拉斯的實例?
'for item in self.values:yield item'? – Torxed 2015-03-13 13:19:44
OOP的意圖是隱藏特定的實現,因此應該避免直接引用實例屬性'.values'。 – EquipDev 2015-03-13 13:21:14
@EquipDev:**在實現中**您仍然必須依賴您自己的狀態。 'Torxed'提出了'__iter__'的實現,使其成爲一個生成器函數。這裏不需要,不過不用'iter()',但是。 – 2015-03-13 13:23:34