Невозможно перебрать список экземпляров класса - PullRequest
1 голос
/ 06 июня 2019

Я строю список, который содержит экземпляры пользовательского класса, который я создаю. Теперь я могу получить доступ к отдельным атрибутам, например так:

 Name_of_list[Index of specific object].attribute1 

Но: если я хочу перебрать bbjects, я не могу получить доступ к атрибутам, появляется следующее сообщение:

"Ошибка TypeEr: объект 'int' не повторяется".

print(list)

[<__main__.Costumer object at 0x00000000118AA3C8>,
<__main__.Costumer object at 0x000000000E3A69E8>,
<__main__.Costumer object at 0x000000000E3A6E10>]

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Python позволяет перебирать объект итератор .Вам не нужно использовать range и индексы для этого, Python сделает это за вас, как вы можете видеть в этом ответе :

for customer in list:
    print(customer.attribute1)

Определение итератора изДокументы:

Объект, представляющий поток данных.Повторные вызовы метода next () итератора (или передача его во встроенную функцию next ()) возвращают последовательные элементы в потоке.

0 голосов
/ 06 июня 2019

Ваша ошибка в строке инициализации цикла

for k in 3:

вы не можете использовать ключевое слово in для итерации, вам нужно выполнить итерацию по последовательности, которую вы можете сгенерировать с помощью range

>>>for k in range(3):
...    print(k)
0
1
2

Редактировать
Я вижу, что получил несколько отрицательных голосов, поэтому я подумал, что попытаюсь прояснить некоторые вещи.
Прежде всего, вопрос ОП заключался в том, что онОбнаружена ошибка в строке кода, с тех пор код OPs был удален при редактировании.
Код что-то пошёл по этому пути

class MyClass:
    def attribute(self):
        pass

instances = [MyClass(), MyClass(), MyClass()]

for k in 3:
    instances[k].attribute()

, и он получал эту ошибку TypeError: 'int' object is not iterable.
За это я ответил (и ОП принял), что ошибка в том, что для использования for и in вам нужна последовательность.
Действительно, это более питонический (и более читаемый) вариант использования

for ins in instances:
    ins.attribute()

или если необходимо отслеживать индекс текущего экземпляра для использования enumerate, который при использовании вместе с итерируемым возвращает кортеж индекса и текущего объекта

for k, ins in enumerate(instances):
    # k will be the current index, and ins will be the current instance.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...