__repr__
와 __str__
는 파이썬에서 객체를 문자열로 표현하기 위해 사용되는 두 가지 매직 메소드입니다. 이 둘은 비슷해 보일 수 있지만, 사용 목적과 호출되는 상황에서 차이가 있습니다.
__repr__
메소드:
__repr__
의 주 목적은 객체의 공식적인 문자열 표현을 제공하는 것입니다. 이 문자열은 가능한 한 해당 객체를 정확하게 나타낼 수 있어야 합니다. 이상적으로는,__repr__
에 의해 반환된 문자열을 사용하여 해당 객체를 재생성할 수 있을 정도로 정확해야 합니다(예:eval(repr(object)) == object
).__repr__
는 주로 개발자가 사용하며, 디버깅과 로깅에서 유용하게 활용됩니다.- 파이썬 인터프리터에서 객체를 단독으로 평가했을 때 보이는 결과는
__repr__
메소드에 의해 반환된 문자열입니다. - 객체의
__str__
메소드가 구현되어 있지 않은 경우, 파이썬은__repr__
을 대신 호출합니다.
__str__
메소드:
__str__
의 목적은 객체의 "비공식적인" 또는 "출력하기 쉬운" 문자열 표현을 제공하는 것입니다. 이는 일반 사용자가 이해하기 쉬운 형태로 되어야 합니다.__str__
는print()
함수나str()
내장 함수가 호출될 때 사용됩니다.__str__
의 구현은 객체를 사람이 읽기 편한 형태로 표현하는 데 중점을 둡니다.
차이점 요약:
__repr__
은 객체의 개발자 친화적인 표현을 제공하며, 이상적으로는 객체의 정확한 표현을 나타냅니다.__repr__
의 결과는 객체를 재생성하는 데 사용할 수 있는 정도로 정확해야 합니다.__str__
은 객체의 사용자 친화적인 표현을 제공하며, 최종 사용자가 읽기 쉬운 형태로 정보를 출력하는 데 사용됩니다.__str__
이 구현되어 있지 않으면__repr__
이 대체로 사용되며, 객체를 문자열로 표현할 필요가 있을 때 언제나__repr__
은 호출될 수 있습니다.
일반적으로, 모든 클래스에 __repr__
을 구현하는 것이 좋으며, 사용자에게 보다 친숙한 문자열 표현이 필요할 때 __str__
을 추가로 구현합니다.
코드 예시
아래는 __repr__
과 __str__
매직 메소드를 사용하는 간단한 파이썬 코드 예시입니다. 이 코드는 Person
클래스를 정의하고, 두 메소드의 차이점을 보여주기 위해 각각을 구현합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
# 객체를 정확하게 표현하며, 가능하면 이 문자열을 사용해 동일한 객체를 재생성할 수 있어야 함
return f"Person('{self.name}', {self.age})"
def __str__(self):
# 사용자가 읽기 쉬운 형태로 객체를 표현함
return f"{self.name} is {self.age} years old."
# Person 객체 생성
person = Person("John Doe", 30)
# __repr__ 메소드 호출: 대화형 인터프리터나 repr() 함수 사용 시
print(repr(person)) # 출력: Person('John Doe', 30)
# __str__ 메소드 호출: print() 함수 또는 str() 함수 사용 시
print(person) # 출력: John Doe is 30 years old.
설명:
__init__
메소드는Person
클래스의 객체가 생성될 때 이름과 나이를 초기화합니다.__repr__
메소드는Person
객체의 개발자 친화적인 표현을 제공합니다. 이 예제에서는Person
객체를 재생성할 수 있는 파이썬 표현식을 문자열로 반환합니다. 이 방식은 디버깅과 로깅에 유용하게 사용될 수 있습니다.__str__
메소드는Person
객체를 사용자 친화적인 방식으로 표현합니다. 이는 최종 사용자가 객체에 대해 읽을 때 직관적으로 이해할 수 있는 형태로 정보를 제공합니다.print(person)
을 호출하면 이 메소드가 사용됩니다.
이 예시는 __repr__
과 __str__
이 어떻게 다르게 사용될 수 있는지를 보여줍니다. 일반적으로, __repr__
은 개발자를 위한 것이며, __str__
은 최종 사용자를 위한 것입니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
Call by Assignment란? (0) | 2024.03.20 |
---|---|
r string, u string이란 (0) | 2024.03.20 |
__new__, __init__ 차이점 (0) | 2024.03.20 |
매직메소드란? (0) | 2024.03.20 |
MRO(Method Resolution Order) (0) | 2024.03.20 |