Python의 __getitem__()

Python에서는 모든 것이 객체입니다. 프로그래머에게 보이지 않는 이면에는 이러한 객체에 대한 '일반적인' 시스템 호출 메서드가 많이 있습니다. 여기라고 불리는 것이 왔습니다. 마법의 방법 . Python의 매직 메소드는 일반적인 Python 코드를 실행할 때 호출되는 특수 메소드입니다. 일반 기능과 구별하기 위해 주위에 이중 밑줄이 표시됩니다.

a와 b를 추가하려면 다음 구문을 작성합니다.

 c = a + b 

내부적으로는 다음과 같이 호출됩니다.

 c = a.__add__(b) 

__getitem__()> 클래스에서 사용될 때 인스턴스가 []> (인덱서) 연산자. 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 부분은 암시적으로 튜플로 구문 분석됩니다. 그만큼 test[5:65:5]> 표현식은 Python의 슬라이스 구문을 사용합니다. 이는 test[slice(5, 65, 5)] 표현식과 동일합니다.

그만큼 __getitem__> 매직 메소드는 일반적으로 목록 인덱싱, 사전 조회 또는 값 범위 액세스에 사용됩니다. 얼마나 다재다능한지를 고려하면 아마도 Python에서 가장 활용도가 낮은 매직 메소드 중 하나일 것입니다.


마음에 드실지도 몰라요