pictures[path]라는 딕셔너리 접근에서 path가 딕셔너리에 없으면 __missing__ 메서드가 호출된다. 이 메서드는 키에 해당하는 디폴트 값을 생성해 딕셔너리에 넣어준 다음에 호출한 쪽에 그 값을 반환해야 한다. 그 이후 딕셔너리에서 같은 경로에 접근하면 이미 해당 원소가 딕셔너리에 들어 있으므로 __missing__이 호출되지 않는다(__getattr__의 동작과 비슷하다. Better way 47: ‘지연 계산 애트리뷰트가 필요하면 __getattr__, __getattribute__, __setattr__을 사용하라’ 참고).
기억해야 할 내용
• 디폴트 값을 만드는 계산 비용이 높거나 만드는 과정에서 예외가 발생할 수 있는 상황에서는 dict의 setdefault 메서드를 사용하지 말라.
• defaultdict에 전달되는 함수는 인자를 받지 않는다. 따라서 접근에 사용한 키 값에 맞는 디폴트 값을 생성하는 것은 불가능하다.
• 디폴트 키를 만들 때 어떤 키를 사용했는지 반드시 알아야 하는 상황이라면 직접 dict의 하위 클래스와 __missing__ 메서드를 정의하면 된다.