__getitem__() i Python

I Python är allt ett objekt. Det finns många 'vanliga' systemanropsmetoder på dessa objekt bakom scenen som inte är synliga för programmeraren. Här kommer vad som kallas som magiska metoder . Magiska metoder i python är speciella metoder som anropas när vi kör vilken vanlig pythonkod som helst. För att särskilja dem med normala funktioner har de omgivande dubbla understreck.

Om vi ​​vill lägga till a och b skriver vi följande syntax:

 c = a + b 

Internt kallas det så här:

 c = a.__add__(b) 

__getitem__()> är en magisk metod i Python, som när den används i en klass tillåter sina instanser att använda []> (indexerare) operatörer. Säg att x är en instans av den här klassen x[i]> motsvarar ungefär type(x).__getitem__(x, i)> .

Metoden __getitem__(self, key)> definierar beteende för när ett objekt nås med hjälp av notationen self[key]> . Detta är också en del av både det föränderliga och oföränderliga behållarprotokollet.

Exempel:




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

Produktion:

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

Till skillnad från vissa andra språk låter Python dig i princip skicka vilket objekt som helst till indexeraren. Du kan bli förvånad över att test[1, 'x', 10.0]> faktiskt analyserar. För Python-tolken är det uttrycket likvärdigt med detta: test.__getitem__((1, 'x', 10.0))> . Som du kan se är 1, 'x', 10.0-delen implicit tolkad som en tupel. De test[5:65:5]> expression använder sig av Pythons skivsyntax. Det motsvarar detta uttryck: test[slice(5, 65, 5)].

De __getitem__> Den magiska metoden används vanligtvis för listindexering, ordbokssökning eller åtkomst av värdeintervall. Med tanke på hur mångsidig den är, är det förmodligen en av Pythons mest underutnyttjade magiska metoder.