더북(TheBook)

sort 메서드가 호출하는 객체 비교 특별 메서드가 정의돼 있지 않으므로 이런 타입의 객체를 정렬할 수는 없다..

tools.sort()

>>>
Traceback ...
TypeError: '<' not supported between instances of 'Tool' and 'Tool'

클래스에 정수와 마찬가지로 자연스러운 순서가 있어야 하는 경우에는 필요한 특별 메서드를 정의하면(예를 들어 Better way 73: ‘우선순위 큐로 heapq를 사용하는 방법을 알아두라’ 참고) 별도의 인자를 넘기지 않고 sort를 쓸 수 있다. 하지만 여러분이 만든 객체가 여러 가지 순서를 지원해야 하는 경우가 더 자주 있다. 이런 경우 자연스러운 순서를 정의하는 것은 실제로는 아무 의미가 없다.

정렬에 사용하고 싶은 애트리뷰트가 객체에 들어 있는 경우가 많다. 이런 상황을 지원하기 위해 sort에는 key라는 파라미터가 있다. key는 함수여야 한다. key 함수에는 정렬 중인 리스트의 원소가 전달된다. key 함수가 반환하는 값은 원소 대신 정렬 기준으로 사용할, 비교 가능한(즉, 자연스러운 순서가 정의된) 값이어야만 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.