Python/study
__str__와 __repr__
by 르면가게
2024. 12. 8.
repr (Representation)
- 목적:
- repr 메서드는 객체의 공식적이고 명확한 문자열 표현을 반환합니다.
- 반환된 문자열은 주로 디버깅이나 개발자용 출력에 사용되며, 가능하다면 해당 문자열로 동일한 객체를 생성할 수 있어야 합니다.
- 개발자에게 객체의 내부 구조를 명확히 전달하는 것이 목표입니다.
- 사용:
- repr() 함수 호출 시 실행됩니다.
- 대화형 인터프리터에서 객체를 입력하면 repr()의 결과가 출력됩니다.
- 권장 사항:
- repr 메서드는 객체를 재생성할 수 있는 문자열 표현을 반환하는 것이 이상적입니다.
- 재생성이 불가능한 경우에도 객체의 중요한 정보를 명확히 보여줘야 합니다.
예제
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name={self.name!r}, age={self.age!r})"
p = Person("Alice", 30)
print(repr(p)) # 출력: Person(name='Alice', age=30)
str (String)
- 목적:
- str 메서드는 객체의 비공식적이고 사용자 친화적인 문자열 표현을 반환합니다.
- 반환된 문자열은 사용자에게 직접 보여줄 때 사용되며, 읽기 쉽고 자연스러운 형태를 제공합니다.
- 사용:
- str() 함수 호출 시 실행됩니다.
- print() 함수로 객체를 출력하거나, 문자열 포매팅(f"{obj}")에 사용됩니다.
- 권장 사항:
- str 메서드는 사용자가 이해하기 쉬운 표현으로 객체를 설명해야 합니다.
- 필요에 따라 간결하고 요약된 정보를 제공할 수도 있습니다.
예제
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} years old"
p = Person("Alice", 30)
print(str(p)) # 출력: Alice, 30 years old
print(p) # 출력: Alice, 30 years old
정리
- repr:
- 개발자 친화적, 디버깅 및 개발용.
- 가능하면 해당 표현을 통해 객체를 다시 생성할 수 있어야 함.
- 예: Person(name='Alice', age=30)
- str:
- 사용자 친화적, 읽기 쉬운 표현.
- 사용자에게 객체를 설명하거나 출력할 때 사용.
- 예: Alice, 30 years old