Python 에서 class 를 사용하는 일은 정말 많을테고, 이를 출력해 줘야 할 때가 있을텐데 이럴 때
__str__ 메서드를 사용하면 좋습니다.
사실 출력이 더 쉬워진다고 말하기는 어렵지만, 그래도 개발하는 사람들은 str () 을 사용할 수 있기를 기대할 거에요.
그닥 기대가 없는 분들도 많겠지만.. 저는 출력을 해야하는 상황이라면 있었으면 좋겠다 라는 생각이 들곤 했습니다.
그럴 때, 원하는 object에 __str__ 메서드를 구현 함으로써 아래와 같은 결과를 얻을 수 있습니다.
class apple:
def __init__(s):
s.color = 'red'
s.size = 'medium'
s.price = 5000
def __str__(s):
return ( "color:" + s.color + ", size:" + s.size + ", price:" + str(s.price) )
class pineapple:
def __int__(s):
s.color = 'red'
s.size = 'large'
s.price = 10000
a = apple()
p = pineapple()
# apple
print ( a )
print ( "Apple class data : " + str ( a ) )
# pineapple
print ( p )
코드를 조금 더 설명하자면.. apple 의 경우 print 함수에 의해 내부 데이터를 출력이 가능하지만, pineapple은 그렇지 못합니다.
apple 의 경우 __str__ method 가 구현되어 있고, 그 함수를 호출함으로써 원하는 string 을 return 받게 됩니다.
하지만 pineapple은 그렇지 못하기 때문에, 내부 데이터 출력이 아닌 __repr__ special function 에 의한 객체 대표값만을 출력해 주게 됩니다.
출력 결과를 보면, apple 은 string 결과를 원하는대로 출력 한 반면에, pineapple 의 출력으로는 내부 값을 보지 못하는 것을 알 수 있습니다.
$ python3 211004_str_method.py
color:red, size:medium, price:5000
Apple class data : color:red, size:medium, price:5000
<__main__.pineapple object at 0x7f8749ee9f28>
객체 내부 값 조회를 하는 경우는 디버깅 목적으로나, 기능의 구현 목적으로나 많이 사용하게 될 것입니다.
__str__ 의 구현을 통해 object의 사용성을 높이는 습관을 들이는 것이 좋을 것 같습니다.
끝.
저는 네이버 엑스퍼트에서 합리적인 가격으로 C++/ Python 관련한 코드문제를 해결해 드리고 있습니다. 관심이 있으시다면 상담요청을 진행 해 주세요. 요청하시는 일정 내 해결이 가능한 문제라면 최선을 다해 도움을 드리겠습니다.
'CS > Python' 카테고리의 다른 글
[python] map 함수(map function) 의 사용방법 및 예시 (0) | 2021.11.13 |
---|---|
[python] 오류출력은 에러로 보내주세요 ! - print 함수의 출력을 stderr 로 보내기 (2) | 2021.10.06 |
[Python] String List 내용 문자열(string) 만드는 방법 - join 함수 (0) | 2021.10.01 |
[Python unittest] Python 으로 Unit test 만드는 방법 2 - assert 종류 (0) | 2021.07.26 |
[Python unittest] Python 으로 Unit test 만드는 방법 1 (0) | 2021.07.20 |