특별 메서드는 새 문법을 만드는 게 아니야
a + b는 a의 __add__ 같은 규약을 호출해. 지원하지 않는 상대라면 NotImplemented를 돌려 반대편의 반사 연산 기회를 주고, 새 객체를 만들지 제자리에서 바꿀지도 타입의 의미에 맞춰 정해.
컨테이너처럼 보이면 컨테이너 규약을 지켜
__len__, __getitem__, __iter__, __contains__를 알맞게 정의하면 len, 인덱스, for, in이 자연스럽게 동작해. 일부 규약만 흉내 내어 기대를 깨지 않게 해.
비교·참거짓·호출도 같은 방식이야
정렬에는 비교 계약을, 조건식에는 __bool__ 또는 길이를, 함수처럼 쓰는 객체에는 __call__을 제공할 수 있어. 문법보다 객체의 의미가 먼저야.