파이썬에서 __str__과 __repr__은 객체를 문자열로 표현할 때 호출되는 특별한 메서드(Magic Method)입니다. 두 메서드의 핵심적인 차이점은 "누구를 위한 출력인가?"에 있습니다.
__str__(self)print(obj), str(obj), format() 함수를 사용할 때 호출됩니다.__repr__(self)repr(obj)를 호출했을 때 호출됩니다.| 구분 | __str__ | __repr__ |
|---|---|---|
| 주요 대상 | 일반 사용자 (User) | 개발자 (Developer / Debugging) |
| 성격 | 읽기 좋게 (Readable) | 명확하고 상세하게 (Unambiguous) |
| 호출 상황 | print(), str() | REPL 인터프리터, repr() |
| 비유 | "이 물건의 이름은 '빨간 사과'입니다." | "사과(색상='빨강', 무게=200g)" |
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 사용자를 위한 친절한 설명
def __str__(self):
return f"{self.name} ({self.age}세)"
# 개발자를 위한 상세하고 명확한 정보 (객체 생성 코드 형태)
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
# 객체 생성
p = Person("홍길동", 30)
# 1. __str__ 호출 (print 사용 시)
print(str(p)) # 출력: 홍길동 (30세)
print(p) # 출력: 홍길동 (30세)
# 2. __repr__ 호출 (repr 사용 시 또는 리스트 안에 있을 때)
print(repr(p)) # 출력: Person(name='홍길동', age=30)
print([p]) # 출력: [Person(name='홍길동', age=30)] (리스트 내부 객체는 repr 호출)
__str__이 없으면? 파이썬은 __repr__을 대신 호출합니다.__repr__이 없으면? 파이썬은 객체의 기본 형태인 <__main__.Person object at 0x...>를 출력합니다.따라서, 클래스를 만들 때 가장 좋은 관행(Best Practice)은 최소한 __repr__을 구현하는 것입니다. __repr__만 잘 만들어두면 __str__이 없어도 프로그램이 동작하기 때문입니다.