I have a subclass of an object that implements __ iter __ dynamic dispatch using a cache generator (I also have a method for iter cache invalidation) as follows:
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
It seems to work ... Are there any bugs that I may not know about? Am I doing something funny?
python iterator generator dispatch
Emanuel landeholm
source share