Введение в __getitem__: волшебный метод в Python

Введение в __getitem__: волшебный метод в Python

Исходный узел: 2011206

Введение в __getitem__: волшебный метод в Python
Изображение по автору

Python — волшебный язык со многими концепциями, с которыми даже опытные пользователи могут быть незнакомы. Дандер или Магические методы - один из них. Волшебные методы — это специальные методы, окруженные двойным подчеркиванием. Они не вызываются явно, в отличие от обычных методов в Python. Одним из таких магических методов является __getitem__ метод, позволяющий объектам Python вести себя как последовательности или контейнеры, например, списки, словари и кортежи. Он берет индекс или срез и извлекает связанное с ним значение из коллекции. Он вызывается автоматически всякий раз, когда мы используем indexer [ ] оператор для доступа к элементам внутри вашего объекта.

Думайте об этом методе как о волшебной палочке, которая дает вам возможность извлекать необходимую информацию, просто написав несколько строк кода. Интересно правда? Этот метод также широко используется в анализе данных и машинном обучении. Итак, давайте углубимся в __getitem__ метод и откройте для себя его силу и гибкость.

Я хочу, чтобы вы поняли, что ваша обязанность как программиста на Python — это больше, чем просто написание функционального кода. Ваш код должен быть эффективным, читабельным и ремонтопригодным. С использованием __getitem__ поможет вам достичь этих целей. Вот некоторые другие преимущества использования этого волшебного метода:

  • Сокращает использование памяти, позволяя извлекать только необходимую информацию вместо загрузки всей структуры данных в память.
  • Обеспечивает большую гибкость в том, как данные обрабатываются и манипулируются
  • Позволяет перебирать коллекцию, не зацикливаясь на данных.
  • Расширяет функциональность, позволяя вам писать расширенную индексацию, которая может быть невозможна со встроенными типами.
  • Упрощает код, так как использует знакомую нотацию

Синтаксис для __getitem__ метод выглядит следующим образом:

def __getitem__(self, index): # Your Implementation pass

 

Он определяет поведение функции и принимает в качестве параметра индекс, к которому вы пытаетесь получить доступ. Мы можем использовать этот метод следующим образом:

my_obj[index] 

 

Это переводится в утверждение my_obj.__getitem__(index) под капотом. Теперь вы можете подумать, чем же он отличается от встроенного indexer [] оператор? Везде, где вы используете это обозначение, python автоматически вызывает __getitem__ метод для вас и является сокращением для доступа к элементам. Но если вы хотите изменить поведение индексации для пользовательских объектов, вам нужно явно вызвать метод __getitem__ метод.

Пример #01

Сначала начнем с простого примера. Мы создадим класс Student, в котором будет список всех студентов, и мы сможем получить к ним доступ по индексу и считать, что индекс представляет их уникальный идентификатор студента.

class Student: def __init__(self, names): self.names=names def __getitem__(self,index): return self.names[index] section_A= Student(["David", "Elsa", "Qasim"])
print(section_A[2])

 

Вывод:

 

Теперь мы перейдем к расширенному примеру, где мы изменим поведение индексации с помощью __getitem__ метод. Предположим, что у меня есть список строковых элементов, и я хочу получить элемент всякий раз, когда я ввожу его индексную позицию, и я также могу получить индексную позицию, если введу саму строку.

class MyList: def __init__(self, items): self.items = items def __getitem__(self, index): if isinstance(index, int): return self.items[index] elif isinstance(index, str): return self.items.index(index) else: raise TypeError("Invalid Argument Type") my_list = MyList(['red', 'blue', 'green', 'black']) # Indexing with integer keys
print(my_list[0]) print(my_list[2]) # Indexing with string keys
print(my_list['red']) print(my_list['green']) 

 

Вывод:

red
green
0 2

Этот метод чрезвычайно полезен для быстрого поиска атрибутов экземпляра. Учитывая гибкость и универсальность этого метода, я бы сказал, что это один из самых малоиспользуемых магических методов Python. Надеюсь, вам понравилось читать эту статью, и дайте мне знать в разделе комментариев, если вам интересно узнать о других магических методах в Python.
 
 
Канвал Мерин — начинающий разработчик программного обеспечения, проявляющий большой интерес к науке о данных и применению ИИ в медицине. Канвал был выбран стипендиатом Google Generation Scholar 2022 для региона APAC. Канвал любит делиться техническими знаниями, создавая статьи на актуальные темы, и стремится улучшить представленность женщин в технологической отрасли.
 

Отметка времени:

Больше от КДнаггетс