什么是默认的 __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 (将#修改为@)