본문 바로가기
CS/Python

[python] python에서 객체를 string으로 출력하는 방법

by Warehaus 2021. 10. 4.

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의 사용성을 높이는 습관을 들이는 것이 좋을 것 같습니다.

 

끝.