
470
3
부
클래스와 프로토콜
이제
Vector
클래스 안에 시퀀스 프로토콜을 구현하자. 여기에서는 슬라이싱을 지원하지 않지
만, 나중에 슬라이싱 지원 기능을 추가한다.
12
.
5
Vector
버전 #
2
: 슬라이스 가능한 시퀀스
FrenchDeck
예제에서
self._components
를 사용했듯이, 객체 안에 들어 있는 시퀀스 속성에
위임하면 시퀀스 프로토콜을 구현하기 위한
__len__( )
과
__getitem__( )
메서드를 다음과
같이 아주 쉽게 구현할 수 있다.
class Vector:
# 중략
# ...
def __len__(self):
return len(self._components)
def __getitem__(self, index):
return self._components[index]
이 두 메서드가 추가되었으니, 다음과 같은 연산을 수행할 수 있다.
>>> v1 = Vector([3, 4, 5])
>>> len(v1)
3
>>> v1[0], v1[-1]
(3.0, 5.0)
>>> v7 = Vector(range(7))
>>> v7[1:4]
array(‘d’, [1.0, 2.0, 3.0])
보다시피 (아주 잘되지는 않지만 ) 슬라이싱도 지원된다.
Vector
의 슬라이스도 배열이 아니
라
Vector
객체가 되면 더 좋을 것이다. 이전의
FrenchDeck ...