Python 연산과 출력에 맞는 객체 인터페이스를 만듭니다.
__repr__, __len__, __eq__, __iter__ 같은 double underscore 메서드는 내장 함수와 연산자가 객체를 다루는 방법을 정합니다. Python 데이터 모델을 따르면 사용자 객체도 기본 자료형처럼 자연스럽게 사용할 수 있습니다.
print(courses)는 __repr__이 만든 CourseCollection(['HTML', 'Python'])을 출력하고, len(courses)는 __len__을 불러 2를, list(courses)는 __iter__가 돌려준 이터레이터를 끝까지 읽어 ['HTML', 'Python']을 만듭니다. __str__을 정의하지 않았기 때문에 print도 __repr__의 결과를 씁니다.
__repr__은 가능하면 개발자가 객체 상태를 재현하거나 진단할 수 있는 문자열을 반환합니다. 지원하지 않는 비교는 NotImplemented를 반환합니다.
놀라운 부작용이 있는 연산자 오버로딩을 피하고 해당 도메인에서 자연스러운 의미가 있을 때만 구현합니다.
__str__과 __repr__의 목적을 섞어 민감한 정보를 로그용 repr에 노출하지 마세요.
직접 바꿔보세요CourseCollection에 __contains__를 추가해 제목 포함 여부를 검사하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.