logo

__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 неявно розбирається як кортеж. Thetest[5:65:5]>вираз використовує синтаксис фрагмента Python. Це еквівалентно цьому виразу: test[slice(5, 65, 5)].

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