파이썬에서의 __str__ 메서드 사용 방법/수정 방법은?
이번 튜토리얼에서는 Python 객체를 문자열로 변환하는 한 가지 Pythonic한 방법인 .str()을 살펴보겠습니다. .str()이 의미하는 바를 배우고, Python 클래스에서 어떻게 사용하는지 알아보겠습니다.
.str() 메서드의 이해와 사용 방법
Python 클래스 Car
를 예시로 들어서 간단한 예제로 시작하겠습니다. 우선, 아래와 같이 .__str__()
메서드를 추가해 보겠습니다.
여기서 메서드 이름 앞뒤로 언더스코어가 두 개 들어간 것을 볼 수 있는데, 이는 두 개의 언더스코어로 메서드를 시작하고 끝내는 것을 의미합니다. 이러한 메서드들은 일명 “던더 메서드”라고도 불리며, Python의 핵심 기능을 나타내는 것입니다.
.__str__()
메서드는 객체가 문자열로 변환될 때 호출되는 메서드입니다. 이 예제에서는 Car
객체를 문자열로 변환할 때, 해당 Car
의 색깔을 알려주는 문자열을 반환하도록 정의하였습니다.
위와 같이 my_car
객체를 출력하면 “a red car”라는 결과를 얻을 수 있습니다. 이는 .__str__()
메서드에 의해 반환된 결과입니다.
객체를 문자열로 변환하는 방법
객체를 문자열로 변환하고 싶다면, 내장 함수인 str()
을 사용하면 됩니다. str()
함수는 내부적으로 .__str__()
메서드를 호출하여 정확한 결과를 반환합니다. 마찬가지로, print()
함수나 포맷 문자열에서도 내부적으로 str()
함수를 호출하게 됩니다.
만약 Car
객체의 문자열 표현을 직접 제어하고 싶다면, .__str__()
메서드를 정의하여 원하는 결과를 반환하면 됩니다. 이러한 관례적인 방법을 따르면, 객체의 문자열 표현을 더욱 세밀하게 제어할 수 있습니다. 따라서 .__str__()
메서드를 정의하는 것은 Pythonic한 방법이라고 할 수 있습니다.
그러나 한 가지 주의할 점은, .__str__()
메서드를 정의해도 객체를 직접 검사하면 여전히 이전의 결과를 얻게 되는 것입니다. 즉, 콘솔에서 객체를 조사하는 경우에는 여전히 이전의 결과가 나타납니다.
.__str__()
과 .__repr__()
의 차이점
객체를 문자열로 변환하는 또 다른 방법으로 .__repr__()
메서드를 사용할 수 있습니다. .__repr__()
메서드는 .__str__()
과 비슷하게 작동하지만, 좀 더 정확한 객체의 표현을 반환합니다.