__getitem__() Pythonissa

Pythonissa kaikki on objektia. Näissä objekteissa kulissien takana on paljon 'tavallisia' järjestelmäkutsumenetelmiä, jotka eivät ole ohjelmoijan nähtävissä. Tässä tulee mitä kutsutaan maagisia menetelmiä . Pythonin maagiset menetelmät ovat erikoismenetelmiä, joita kutsutaan, kun suoritamme mitä tahansa tavallista python-koodia. Niiden erottamiseksi normaaleista funktioista niitä ympäröi kaksi alaviivaa.

Jos haluamme lisätä a:n ja b:n, kirjoitamme seuraavan syntaksin:

 c = a + b 

Sisäisesti sitä kutsutaan nimellä:

 c = a.__add__(b) 

__getitem__()> on Pythonin maaginen menetelmä, joka luokassa käytettynä antaa instansseille mahdollisuuden käyttää []> (indeksoija) operaattorit. Sano sitten, että x on tämän luokan esiintymä x[i]> on suunnilleen sama kuin type(x).__getitem__(x, i)> .

Menetelmä __getitem__(self, key)> määrittää käyttäytymisen, kun kohdetta käytetään, käyttämällä merkintää self[key]> . Tämä on myös osa sekä muuttuvaa että muuttumatonta konttiprotokollia.

Esimerkki:




# 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> ()]>

Lähtö:

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

Toisin kuin jotkut muut kielet, Python antaa sinun siirtää minkä tahansa objektin indeksointilaitteeseen. Saatat yllättyä, että test[1, 'x', 10.0]> itse asiassa jäsentää. Python-tulkin kannalta tämä lauseke vastaa tätä: test.__getitem__((1, 'x', 10.0))> . Kuten näet, osa 1, 'x', 10.0 jäsennetään implisiittisesti monikkona. The test[5:65:5]> lauseke käyttää Pythonin viipalesyntaksia. Se vastaa tätä lauseketta: testi[slice(5, 65, 5)].

The __getitem__> magic-menetelmää käytetään yleensä luetteloiden indeksointiin, sanakirjahakuun tai arvoalueiden hakemiseen. Ottaen huomioon kuinka monipuolinen se on, se on luultavasti yksi Pythonin alihyödyllisimmistä taikamenetelmistä.