__ iter __()реализован как генератор

У меня есть подкласс объекта, который реализует динамическую отправку __ iter __с использованием генератора кэширования (. У меня также есть метод для аннулирования кэша iter )вот так:

def __iter__(self):
    print("iter called")
    if self.__iter_cache is None:
        iter_seen = {}
        iter_cache = []
        for name in self.__slots:
            value = self.__slots[name]
            iter_seen[name] = True
            item = (name, value)
            iter_cache.append(item)
            yield item           
        for d in self.__dc_list:
            for name, value in iter(d):
                if name not in iter_seen:
                    iter_seen[name] = True
                    item = (name, value)
                    iter_cache.append(item)
                    yield item
        self.__iter_cache = iter_cache
    else:
        print("iter cache hit")
        for item in self.__iter_cache:
            yield item

Кажется, это работает... Есть ли какие-то ошибки, о которых я могу не знать? Я делаю что-то нелепое?

8
задан Ashwini Chaudhary 5 July 2012 в 15:09
поделиться