프로그래밍 언어/Python

[python] repr과 str의 차이

바보1 2022. 5. 4. 22:44

repr과 str은 둘 다 문자열을 반환한다.

하지만 사소하지만 중요한 차이점이 있다.

 

hi = 24

print(str(hi))
print(repr(hi))
24
24

 

 

숫자가 아닌 문자열에 적용해보면,

 

hi = "hi-guten-tag"

print(str(hi))
print(repr(hi))
hi-guten-tag
'hi-guten-tag'

 

같은 문자열임에도 repr()을 쓰면 '' 따옴표가 추가되는 걸 볼 수 있다.

 

쉽게 생각하면 str은 우리가 쉽게 볼 수 있는, 그런 비공식적인 문자열을 반환하는 반면에

repr은 공식적인 문자열을 반환한다.

 

즉, repr은 시스템, 인터프리터가 객체를 인식할 수 있는 문자열을 반환하는 것이다.

 

따라서 eval(repr(obj))를 한다면 해당 obj를 얻을 수 있는 것이다.

쉽게 말해서 repr(obj)는 obj를 나타내는 문자열을 리턴한다.

 

한 번 테스트 해보면,

class A:
    def __repr__(self):
        return 'A()'

a = A()
b = eval(repr(a))
print(type(b))

이렇게 repr을 재정의했고, repr(a)를 통해서 'A()'이 반환되게 했다.

 

결과 값은 당연히도,

<class '__main__.A'>

이 나왔다.

 

뭐 이건 사실 repr 대신에 str로 해도 되지만, 아무튼 repr은 안에 들어온 object를 문자열로 표현한다고 보면 될 것 같다.

 

 

참고 : https://wikidocs.net/134994