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
是否被认为是不好的做法。如果这是一种不好的做法,并且我需要从同一类中的另一个方法进行自我循环,那我将如何实现它。
答案 0 :(得分:0)
不。为什么会这样呢?定义__iter__
的原因是可以迭代对象。我认为在已经存在的情况下重新实现它是一种不好的做法。
这是您描述在standard library python object(OrderedDict
)中使用的行为的示例。
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,)