对自己进行迭代是否是错误的做法?

时间:2019-02-06 21:54:14

标签: python loops iterator

class Data:
    def __init__(self, dictionary):
        self.data = dictionary

    def __iter__(self):
        for key,val in self.data.items():
            yield (key, val)

    def iter_on_self(self):
        for i in self:
            yield i

我知道上面的iter_on_self是多余的,但是我想知道for i in self: #do something是否被认为是不好的做法。如果这是一种不好的做法,并且我需要从同一类中的另一个方法进行自我循环,那我将如何实现它。

1 个答案:

答案 0 :(得分:0)

不。为什么会这样呢?定义__iter__的原因是可以迭代对象。我认为在已经存在的情况下重新实现它是一种不好的做法。

这是您描述在standard library python objectOrderedDict)中使用的行为的示例。

def __reduce__(self):
    'Return state information for pickling'
    items = [[k, self[k]] for k in self]
    tmp = self.__map, self.__root
    del self.__map, self.__root
    inst_dict = vars(self).copy()
    self.__map, self.__root = tmp
    if inst_dict:
        return (self.__class__, (items,), inst_dict)
    return self.__class__, (items,)