微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是默认的 __iter__ 函数?

如何解决什么是默认的 __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 举报,一经查实,本站将立刻删除。