次のように、キャッシングジェネレーターを使用して動的ディスパッチを実装するオブジェクトサブクラスがあります__ 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
うまくいっているようです...私が気づいていないかもしれない落とし穴はありますか? 私は何かばかげたことをしていますか?