问题描述
我编写了一个具有 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 (将#修改为@)