__getitem__() у Python

У Python все є об’єктом. Існує багато «звичайних» методів системного виклику цих об’єктів за сценою, які не видно програмісту. Ось прийшли те, що називається магічні методи . Магічні методи в Python — це спеціальні методи, які викликаються під час виконання будь-якого звичайного коду Python. Щоб відрізнити їх від звичайних функцій, навколо них є подвійне підкреслення.

Якщо ми хочемо додати a і b, ми пишемо такий синтаксис:

 c = a + b 

Всередині це називається так:

 c = a.__add__(b) 

__getitem__()> це чарівний метод у Python, який при використанні в класі дозволяє його екземплярам використовувати []> (індексатор) оператори. Тоді скажімо, x є екземпляром цього класу x[i]> приблизно еквівалентно type(x).__getitem__(x, i)> .

Метод __getitem__(self, key)> визначає поведінку під час доступу до елемента за допомогою нотації self[key]> . Це також є частиною як змінного, так і незмінного контейнерних протоколів.

приклад:




# Code to demonstrate use> # of __getitem__() in python> > > class> Test(> object> ):> > > # This function prints the type> > # of the object passed as well> > # as the object item> > def> __getitem__(> self> , items):> > print> (> type> (items), items)> > # Driver code> test> => Test()> test[> 5> ]> test[> 5> :> 65> :> 5> ]> test[> 'techcodeview.com'> ]> test[> 1> ,> 'x'> ,> 10.0> ]> test[> 'a'> :> 'z'> :> 2> ]> test[> object> ()]>

Вихід:

 5 slice(5, 65, 5) techcodeview.com (1, 'x', 10.0) slice('a', 'z', 2) 

На відміну від деяких інших мов, Python фактично дозволяє передавати будь-який об’єкт в індексатор. Ви можете бути здивовані тим, що test[1, 'x', 10.0]> насправді аналізує. Для інтерпретатора Python цей вираз еквівалентний цьому: test.__getitem__((1, 'x', 10.0))> . Як бачите, частина 1, «x», 10.0 неявно розбирається як кортеж. The test[5:65:5]> вираз використовує синтаксис фрагмента Python. Це еквівалентно цьому виразу: test[slice(5, 65, 5)].

The __getitem__> магічний метод зазвичай використовується для індексування списку, пошуку в словнику або доступу до діапазонів значень. Зважаючи на те, наскільки він універсальний, це, мабуть, один із магічних методів Python, які найбільше не використовуються.