如何解决什么是默认的 __iter__ 函数?
我编写了一个具有 init
、__getitem__
和 __len__
函数的类。
在使 __getitem__
函数变得更复杂后,我注意到对对象的迭代不知道何时停止(尽管 __len__
按预期工作)。
那么默认的 __iter__
是做什么的?
以我的代码为例(尽管它应该无关紧要):
class SubsetDataset(Dataset):
def __init__(self,source_dataset: Dataset,desired_classes: list):
self.source_dataset = source_dataset
self.desired_classes = desired_classes
self.index_to_sub = dict()
i = 0
for j,d in enumerate(self.source_dataset):
sampel,label = d
if label in self.desired_classes:
self.index_to_sub[i] = j
i += 1
def __getitem__(self,index):
sample,label = self.source_dataset[self.index_to_sub[index]]
return sample,label
def __len__(self):
return len(self.index_to_sub)
我的 __iter__
和 __next__
函数解决了问题(我不想实现):
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n >= len(self):
raise stopiteration
next = self.source_dataset[self.index_to_sub[self.n]]
self.n += 1
return next
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。