더북(TheBook)

문제는 defaultdict 생성자에 전달한 함수는 인자를 받을 수 없다는 데 있다. 이는 defaultdict가 호출하는 도우미 함수가 처리 중인 키를 알 수 없다는 뜻이다. 이로 인해 파일 경로를 사용해 open을 호출할 방법이 없다. 이런 상황에서는 setdefaultdefaultdict 모두 필요한 기능을 제공하지 못한다.

이런 상황이 흔히 발생하기 때문에 파이썬은 다른 해법을 내장해 제공한다. dict 타입의 하위 클래스를 만들고 __missing__ 특별 메서드를 구현하면 키가 없는 경우를 처리하는 로직을 커스텀화할 수 있다. 다음 코드는 앞의 예제와 똑같은 open_picture 도우미 함수를 활용하는 새로운 클래스를 정의해서 키가 없는 경우 파일을 여는 딕셔너리를 만든다.

class Pictures(dict):
    def __missing__(self, key):
        value = open_picture(key)
        self[key] = value
        return value
        
pictures = Pictures()
handle = pictures[path]
handle.seek(0)
image_data = handle.read()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.