列表无iterator方法报错及自定义可下标迭代器类解决
问题与解决方案
问题背景
我的代码返回一个对象列表,示例如下:
[<DomesticHomePage: homepage>, <TopicLandingPage: Advice>, <ArticleListingPage: list two>, <ArticlePage: Article B1>, <ArticlePage: Article B2>, <ArticleListingPage: list one>, <ArticlePage: Article A0>, <ArticlePage: Article A1>, <ArticlePage: Article A2>, <ArticlePage: Article A4>, <ArticlePage: Article C0>, <ArticlePage: Article C1>, <ArticlePage: Article C2>, <ArticlePage: Article C3>, <ArticlePage: D1>, <MarketsTopicLandingPage: Markets>, <CountryGuidePage: Test GCP 0>, <CountryGuidePage: Test GCP 1>, <CountryGuidePage: Test GCP 2>, <CountryGuidePage: Test GCP 3>, <CountryGuidePage: Test GCP 4>, <CountryGuidePage: Test GCP 5>, <CountryGuidePage: Test GCP 6>, <CountryGuidePage: Test GCP 7>, <CountryGuidePage: Test GCP 8>]
当代码其他部分尝试调用该列表的.iterator()方法时,抛出错误:
AttributeError: 'list' object has no attribute 'iterator'
我需要返回一个具备iterator()方法的对象,于是尝试为列表创建迭代器类,但遇到“迭代器类不可下标”的错误。
尝试过程
最初编写的ItemsIterator类如下:
class ItemsIterator: def __init__(self, items): self.items = items self.count = 0 def __iter__(self): return self def __next__(self): self.count += 1 return list(self)[self.count] def __len__(self): return len(self.items)
之后尝试添加__getitem__方法,但问题仍未解决:
def __getitem__(self, key): return self.items[key]
最终解决方案
修改后的ItemsIterator类解决了所有问题:
class ItemsIterator: def __init__(self, items): self.items = items def iterator(self): return iter(self.items) def __len__(self): return len(self.items) def __getitem__(self, key): return ItemsIterator(self.items[key])
内容的提问来源于stack exchange,提问作者DavidU
相关产品推荐
相关产品推荐

