Объект 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 ) 
  • Python: выполняет ли итерация через «list » первую копию этой части списка (что может быть дорого)?
  • Программно загружать контент с дисков Share Links
  • Как использовать пользовательские библиотеки и приложения python в Google App Engine?
  • Python - Может (или должен) изменить os.path.sep?
  • преобразовать изображение в байтовый литерал в python
  • Запуск функции python каждую секунду
  • Как удалить «Ошибка подключения Http» в python 35
  • Получите себя .__ module__ класса вне зависимости от того, как импортировано
  • Получить список атрибутов в классе
  • Избегайте двойного ввода имен классов в python
  • Как выполнить вторичную сортировку в python?
  •  
    Interesting Posts for Van-Lav

    Как преобразовать pandas / dataframe в XML?

    Библиотека текстовой текстуры Python – Как сохранить разрыв строки?

    Установите libpq-dev на Mac OS X

    Как остановить все тесты из теста или setUp с помощью unittest?

    Добавление существующего листа excel с новым фреймворком данных с использованием python pandas

    Разложение регулярных выражений Python без пустой строки

    Добавление свойства, предоставленного пользователем (во время выполнения), к экземпляру класса Expando в движке Google?

    Доступ к адресу памяти объекта

    Какой инструмент Unix позволяет быстро добавлять / удалять текст в сценарий Python?

    Получить текст виджета кнопки

    AttributeError: невозможно установить атрибут в python

    Python не вызывает внешнюю часть программы 2

    Вызов согласования NLTK – как получить текст до / после слова, которое было использовано?

    Какова базовая структура данных для списков Python?

    Ошибка ValueError: ошибка в области математики, продолжает появляться

    Python - лучший язык программирования в мире.