Определение __iter__ для двух переменных экземпляра разной длины - PullRequest
0 голосов
/ 09 июня 2018

У меня есть следующий класс.У него есть две переменные экземпляра, представленные в виде массивов.Они не обязательно будут иметь одинаковую длину:

class A(object):

    def __init__(self, input):
        self.input = []
        for data in input:
            self.input.append(data)
        self.other_information = []

И self.input, и self.other_information будут содержать объекты из других классов.В моем методе __str__ мне нужно будет обойти их обоих.Определение метода __iter__ для обработки объекта с переменной экземпляра с одним массивом не является проблемой.Если бы два массива имели одинаковую длину, это не было бы проблемой, но могу ли я сделать один метод __iter__ для перебора двух переменных экземпляра в моем методе __str__, которые имеют разную длину?Я видел посты, не относящиеся к ООП, здесь, но что из этого?

1 Ответ

0 голосов
/ 09 июня 2018

Вы можете использовать itertools.chain () для последовательной итерации двух ваших массивов

import itertools


class A(object):
    def __init__(self, input):
        self.input = []
        for data in input:
            self.input.append(data)
        self.other_information = list(range(5))

    def __iter__(self):
        return itertools.chain(self.input, self.other_information)


a = A(['a', 'b', 'c'])

for i in a:
    print(i)

# a
# b
# c
# 0
# 1
# 2
# 3
# 4

Вы также можете использовать «yield from».Результат будет таким же.

def __iter__(self):
    yield from self.input
    yield from self.other_information
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...