Вступ до __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

Давайте спочатку почнемо з легкого прикладу. Ми створимо клас студентів, який матиме список усіх студентів, і ми матимемо доступ до них за індексом і вважатимемо, що індекс представляє їхній унікальний ідентифікатор студента.

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.
 
 
Канвал Мегрін — початківець розробник програмного забезпечення, який цікавиться наукою про дані та застосуванням ШІ в медицині. Kanwal було обрано Google Generation Scholar 2022 для регіону APAC. Канвал любить ділитися технічними знаннями, пишучи статті на актуальні теми, і прагне покращити представництво жінок у технологічній індустрії.
 

Часова мітка:

Більше від KDnuggets