파이썬 객체 지향 프로그래밍에서 str() 함수는 객체를 사람이 읽기 쉬운 문자열 형태로 변환해 주는 역할을 합니다. 이때 핵심이 되는 것이 바로 클래스 내부에 정의되는 __str__ 메서드입니다.
__str__ 메서드란 무엇인가?
__str__은 __init__과 마찬가지로 파이썬이 특별하게 취급하는 특수 메서드(special method)입니다. 이 메서드는 객체의 '비공식적(informal)' 문자열 표현을 반환하도록 정의되며, 주로 디버깅 과정에서 객체의 상태를 빠르게 확인할 때 매우 유용합니다.
__repr__ 메서드가 개발자를 위한 공식적인(unambiguous) 표현을 제공한다면, __str__은 최종 사용자에게 보여주기 적합한 친숙하고 간결한 형태의 문자열을 만든다는 점에서 차이가 있습니다.
__str__ 메서드 구현 예제
다음은 시간 정보를 담는 Time 클래스에 __str__ 메서드를 구현한 코드입니다.
class Time:
def __init__(self, hour=0, minute=0, second=0):
self.hour = hour
self.minute = minute
self.second = second
def __str__(self):
return '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second)
'%.2d' 포맷 지정자를 사용하면 숫자가 항상 두 자리로 표시되므로, 7시 36분이 07:36:00처럼 깔끔하게 출력됩니다.
print() 호출 시 __str__ 메서드의 동작 원리
객체를 print() 함수로 출력하면, 파이썬은 내부적으로 해당 객체의 __str__ 메서드를 자동으로 호출합니다.
>>> time = Time(7, 36) >>> print(time) 07:36:00
만약 클래스에 __str__ 메서드를 정의하지 않았다면, 파이썬은 기본적으로 <__main__.Time object at 0x...>와 같이 의미를 알기 어려운 객체 주소 정보를 출력했을 것입니다. 즉, __str__을 잘 활용하면 객체의 정보를 직관적인 문자열로 표현할 수 있습니다.
정리
__str__은 객체의 비공식적이고 읽기 쉬운 문자열 표현을 반환하는 특수 메서드입니다.print()함수나str()함수가 호출될 때 파이썬이 자동으로 실행합니다.- 디버깅 및 로그 출력 시 객체 상태를 확인하는 데 큰 도움이 됩니다.
- 참고로 파이썬 3에서는
print가 함수이므로print(time)처럼 괄호와 함께 사용해야 합니다.