__getitem__() Python

Python programoje viskas yra objektas. Šiems objektams užkulisiuose yra daug „įprastų“ sistemos iškvietimo metodų, kurių programuotojas nemato. Čia ateina tai, kas vadinama magijos metodai . Magiškieji python metodai yra specialūs metodai, kurie iškviečiami, kai vykdome bet kokį įprastą python kodą. Norėdami atskirti juos nuo įprastų funkcijų, juos supa dvigubi apatiniai brūkšniai.

Jei norime pridėti a ir b, rašome tokią sintaksę:

 c = a + b 

Viduje jis vadinamas taip:

 c = a.__add__(b) 

__getitem__()> yra magiškas Python metodas, kuris, kai naudojamas klasėje, leidžia savo egzemplioriams naudoti []> (indeksuotojo) operatoriai. Pasakykite, kad x yra šios klasės pavyzdys x[i]> yra maždaug lygiavertis type(x).__getitem__(x, i)> .

Metodas __getitem__(self, key)> apibrėžia elgesį, kai pasiekiamas elementas, naudojant žymėjimą self[key]> . Tai taip pat yra keičiamo ir nekeičiamo konteinerio protokolų dalis.

Pavyzdys:




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

Išvestis:

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

Skirtingai nuo kai kurių kitų kalbų, „Python“ iš esmės leidžia perduoti bet kokį objektą į indeksavimo priemonę. Galite nustebti, kad test[1, 'x', 10.0]> iš tikrųjų analizuoja. Python interpretatoriui ši išraiška yra lygiavertė: test.__getitem__((1, 'x', 10.0))> . Kaip matote, 1, 'x', 10.0 dalis yra netiesiogiai išanalizuota kaip eilutė. The test[5:65:5]> išraiška naudoja Python pjūvio sintaksę. Tai atitinka šią išraišką: testas[slice(5, 65, 5)].

The __getitem__> magic metodas paprastai naudojamas sąrašo indeksavimui, žodyno paieškai arba prieigai prie reikšmių diapazonų. Atsižvelgiant į tai, koks jis universalus, tai tikriausiai yra vienas iš labiausiai nepakankamai naudojamų Python magiškų metodų.