메서드를 이용해 항목을 모두 꺼낸 후 다시 넣음으로써 실제 항목을 어떻게 저장하는지 몰라도
Tombola
내부를 조사할 수 있음을 보여 준다. 이 예제의 핵심은 인터페이스에 정의된 다른 메
서드만 이용하는 한
ABC
에 구상 메서드를 제공할 수도 있음을 보여 주는 것이다. 내부 데이터
구조를 아는
Tombola
의 구상 서브클래스는 언제든지 더 똑똑한 방식으로
inspect()
를 오버
라이드할 수 있지만, 꼭 오버라이드할 필요는 없다.
[예제
13
-
7
]의
loaded()
메서드는 코드 한 줄이지만, 값비싼 연산을 수행한다. 단지
bool()
연산을 적용하려고
inspect()
를 호출해 튜플을 생성하기 때문이다. 이 코드가 작동은 하지
만, 구상 서브클래스에서 더 효율적으로 구현할 수 있다(이 부분은 나중에 설명한다).
여기서 비효율적으로 구현한
inspect()
메서드는
self.pick()
이 발생시키는
LookupError
를 잡아서 처리해야 한다는 점에 주의하라.
self.pick()
이
LookupError
를 발생시킨다는 것
도 인터페이스의 일부이지만, 파이썬에서는 문서 외에는 이 사실을 명시할 방법이 없다([예제
13
-
7
]
pick()
추상 메서드의 독스트링을 참조하라).
LookupError
예외를 선택한 이유는 파이썬 예외 계층구조에서
IndexError
및
KeyError ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.