Я пытаюсь изменить следующий код, чтобы MyCollection завербовал словарь. Мне еще нужно реализовать итераторы и следующих методов, чтобы иметь функциональность «для элементов в коллекции». Я знаю, что это можно легко сделать путем повторения значений, но я должен сделать это так. Кто-нибудь может мне помочь ?Итеративная коллекция Python, которая обертывает словарь
class MyCollection:
def __init__(self):
self._data = [] // should be {}
def __iter__(self):
'''
Return an iterator
'''
self._iterPoz = 0
return self
def __next__(self):
'''
Returns the next element of the iteration
'''
if self._iterPoz >= len(self._data):
raise StopIteration()
rez = self._data[self._iterPoz]
self._iterPoz = self._iterPoz + 1
return rez
Если вы хотите, чтобы пользователь итерацию по внутренним данным, только 'вернуть ИТЭР (self._data)' 'для __iter__' и тогда вам не нужно предоставлять' __next__'. – jonrsharpe
@jonrsharpe - хорошая точка, но похоже, что он хочет итерации значений, а не ключей, поэтому 'return iter (self._data.values ())'. – tdelaney
Его трудно сделать, индексируя, потому что индексы индексируются по их именам. Вам нужно будет захватить список имен, но тогда вы рискуете изменить dict во время итерации и поднять «KeyError». Я не думаю, что мы можем ответить на этот вопрос без каких-либо подробностей о том, почему у вас такое странное ограничение и что именно это ограничение. – tdelaney