Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 repr() 함수란? 객체의 '공식' 문자열 표현 완벽 이해

파이썬 공식 문서에 따르면 __repr__()은 객체의 “공식(official)” 문자열 표현을 계산하는 데 사용되는 특수 메서드입니다. 내장 함수인 repr()은 이 __repr__() 메서드를 호출하여 객체를 화면에 표시합니다.

__repr__()이 반환하는 문자열은 단순히 사람이 읽기 좋은 형태를 넘어, 그 자체로 해당 객체를 다시 생성할 수 있는 방법 중 하나라는 점이 중요한 특징입니다. 일반적으로 __repr__()은 개발자(디버깅 용도)에게 유용하고, __str__()은 최종 사용자에게 보여주는 용도로 사용된다는 차이가 있습니다.

예제 1: Point 클래스에서 __repr__() 구현하기

다음 코드는 클래스에 __repr__()을 직접 구현하여 사용하는 방법을 보여줍니다.

class Point:
def __init__(self, x, y):
self.x, self.y = x, y

def __repr__(self):
return 'Point(x=%s, y=%s)' % (self.x, self.y)

p = Point(3, 4)
print(p)

실행 결과

Point(x=3, y=4)

print() 함수는 객체를 출력할 때 기본적으로 __repr__()을 호출하므로, 우리가 정의한 형식대로 객체가 표시된 것을 확인할 수 있습니다.

예제 2: datetime 객체와 repr()

이번에는 datetime 모듈로 생성한 객체에 repr()을 적용해 보겠습니다.

>>> import datetime
>>> today = datetime.datetime.now()
>>> repr(today)
'datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)'

반환된 결과는 문자열이지만, 이것은 datetime 객체의 “공식” 표현입니다. 즉, 이 문자열을 그대로 사용하면 동일한 객체를 다시 만들어낼 수 있습니다.

eval()로 객체 재생성하기

>>> eval('datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)')
datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)

내장 함수 eval()은 문자열을 입력받아 이를 파이썬 표현식으로 평가합니다. 위 예제에서 eval()은 datetime 객체의 공식 문자열 표현을 실제 datetime 객체로 변환했으며, 원본 객체와 동일한 값임을 확인할 수 있습니다.

정리

- repr(obj): 객체의 공식 문자열 표현을 반환하는 내장 함수
- __repr__(): repr()이 호출하는 특수 메서드로, 개발자가 직접 재정의할 수 있음
- __str__(): print()나 str()이 우선적으로 사용하는, 사용자 친화적인 문자열을 반환하는 메서드
- 좋은 __repr__()은 eval()로 객체를 복원할 수 있는 형태를 제공하여 디버깅과 로깅에 큰 도움이 됩니다.