Итерирование над собой - плохая практика? - PullRequest
0 голосов
/ 07 февраля 2019
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 голосов
/ 07 февраля 2019

Нет.С чего бы это?Причина, по которой вы определяете __iter__, заключается в том, что вы можете перебирать свой объект.Я бы сказал, что это плохая практика - переопределять его, когда он уже есть.

Вот пример описанного вами поведения при использовании в стандартной библиотеке Python-объекта (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,)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...