Объект MyClass не имеет атрибута '__getitem__'

У меня есть класс вроде этого:

class MyClass(object): def __init__(self, id, a, b, c): self.myList = [] self.id = id self.a = a self.b = b self.c = c def addData(self, data): self.myList.append(data) 

В моем основном коде я создаю список экземпляров MyClass с именем myClassList . В строке я должен проверить, существует ли элемент с указанным id . Я делаю это так:

 id = 'foo' # in real code is set dynamically recent_item = next( (item for item in myClassList if item['id'] == id), None ) 

вторая строка в этом коде выражает эту ошибку:

Объект MyClass не имеет атрибута '__getitem__'

Как я могу исправить?

4 Solutions collect form web for “Объект MyClass не имеет атрибута '__getitem__'”

item – это не словарь, а класс, поэтому он имеет различный синтаксис для доступа к членам. id доступа вместо этого:

 item.id 

Если вы действительно хотели иметь доступ к вашим атрибутам с помощью inst["attr"] и объяснять свою ошибку, вам нужно добавить __getitem__ к вам:

 class MyClass(object): def __init__(self, id, a, b, c): self.myList = [] self.id = id self.a = a self.b = b self.c = c def addData(self, data): self.myList.append(data) def __getitem__(self, item): return getattr(self, item) 

id является атрибутом экземпляра MyClass, вам нужно получить к нему доступ как item.id

 recent_item = next( (item for item in myClassList if item.id == id), None ) 

Как и ошибка, вы можете использовать только индекс в экземплярах класса, если класс определяет метод экземпляра __getitem__() .

Поскольку id является атрибутом экземпляра, вы должны использовать – item.id вместо item['id'] .

Пример –

 recent_item = next( (item for item in myClassList if item.id == id), None ) 
  • Проект Эйлера № 3, бесконечный цикл по факторизации
  • Часто внутренняя ошибка http 500 с API-интерфейсом google drive.files.get
  • Кириллические символы в Python 2.7
  • Отображение изображения, сохраненного в виде двоичного блока в шаблоне
  • Сортировка словаря по значению, затем клавишей
  • Что такое по умолчанию __hash__ в python?
  • Как выполнить глубокие сравнения равенств двух списков кортежей?
  • pycallgraph с pycharm не работает
  • Python - лучший язык программирования в мире.