본문 바로가기
파이썬

파이썬 __getitem__에서 슬라이싱 구현

by º기록 2020. 11. 25.
반응형

벡터 표현을 만드는 클래스에 대한 슬라이스 기능을 구현하려고합니다.

지금까지이 코드를 가지고 있는데, 슬라이스를 제대로 구현할 것이라고 생각하지만 v [4] 와 같은 호출을 할 때마다 v가 벡터 인 파이썬은 충분한 매개 변수가 없다는 오류를 반환합니다. 그래서 일반 인덱스와 슬라이싱을 모두 처리하기 위해 클래스에서 getitem 특수 메서드를 정의하는 방법을 알아 내려고합니다.

def __getitem__(self, start, stop, step):
    index = start
    if stop == None:
        end = start + 1
    else:
        end = stop
    if step == None:
        stride = 1
    else:
        stride = step
    return self.__data[index:end:stride]

 

해결 방법

 

__ getitem __ () 메소드는 객체가 슬라이스 될 때 slice 객체를받습니다. 구성 요소를 가져 오려면 slice 객체의 start , stop step 멤버를 확인하기 만하면됩니다. 슬라이스.

>>> class C(object):
...   def __getitem__(self, val):
...     print val
... 
>>> c = C()
>>> c[3]
3
>>> c[3:4]
slice(3, 4, None)
>>> c[3:4:-2]
slice(3, 4, -2)
>>> c[():1j:'a']
slice((), 1j, 'a')

 

참조 페이지 https://stackoverflow.com/questions/2936863

 

 

반응형

댓글