공식 Python 문서에 따르면 __repr__은 객체의 "공식" 문자열 표현을 찾는 데 사용되고 __str__은 개체의 "비공식" 문자열 표현을 찾는 데 사용됩니다. print 문과 str() 내장 함수는 __str__을 사용하여 객체의 문자열 표현을 표시하는 반면 repr() 내장 함수는 __repr__을 사용하여 객체를 표시합니다. 두 가지 방법이 실제로 무엇을 하는지 이해하기 위해 예를 들어 보겠습니다.
날짜/시간 개체를 만들어 보겠습니다. −
>>> import datetime >>> today = datetime.datetime.now() When I use the built-in function str() to display today: >>> str(today) '2018-01-12 09:21:58.130922'
사용자가 날짜와 시간을 이해할 수 있도록 날짜가 문자열로 표시되었음을 알 수 있습니다. 이제 내장 함수 repr()−
을 사용할 때를 봅시다.>>> repr(today) 'datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)'
이 또한 문자열을 반환했지만 문자열은 datetime 개체의 "공식" 표현이었고, 이는 이 "공식" 문자열 표현이 개체를 재구성할 수 있음을 의미합니다 -
>>> eval('datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)') datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)
eval() 내장 함수는 문자열을 받아 datetime 객체로 변환합니다.
따라서 일반적으로 우리가 코딩하는 모든 클래스에는 __repr__이 있어야 하며 datetime의 경우처럼 객체의 문자열 버전을 갖는 것이 유용하다고 생각하면 __str__ 함수를 만듭니다.