python의 str() 및 repr() 메서드는 모두 문자열의 문자열 표현에 사용됩니다. 둘 다 같은 강아지를 섬기는 것처럼 보이지만 약간의 차이가 있습니다.
x가 원하는 객체인 곳에서 파이썬 내장 함수 str(x)를 호출할 때 어떤 일이 일어나는지 알아차린 적이 있습니까? str(x)의 반환 값은 두 가지 방법에 따라 달라집니다. 기본 선택은 __str__이고 폴백은 __repr__입니다.
먼저 python 문서가 이에 대해 무엇이라고 말하는지 봅시다 -
>>> help(str) Help on class str in module builtins: class str(object) | str(object='') -> str | str(bytes_or_buffer[, encoding[, errors]]) -> str | | Create a new string object from the given object. >>> help(repr) Help on built-in function repr in module builtins: repr(obj, /) Return the canonical string representation of the object. For many object types, including most builtins, eval(repr(obj)) == obj.
이제 몇 가지 예를 사용하여 이 두 가지 방법을 이해하려고 합니다.
>>> str(123) '123' >>> repr(123) '123' >>> #Above we see- with integer data, there is no difference >>> #Now let's try string data on these two methods >>> str('Python') 'Python' >>> repr('Python') "'Python'"
repr() 및 str()의 반환 값은 정수 값에 대해 동일하지만 string의 반환 값에는 차이가 있습니다. 하나는 형식이고 다른 하나는 비공식입니다.
이제 공식 파이썬 문서를 보면 __str__은 객체의 "비공식"(가독성) 문자열 표현을 찾는 데 사용되는 반면 __repr__은 개체의 "공식" 문자열 표현을 찾는 데 사용됩니다.
공식 표현과 비공식 표현의 차이점은 str 값에 대한 __repr__의 기본 구현을 eval에 대한 인수로 호출할 수 있고 반환 값은 유효한 문자열 개체라는 것입니다. 이 함수(repr())는 문자열을 받아서 그 내용을 파이썬 코드로 평가합니다.
따라서 "'Python'"을 전달하면 해당 작업이 수행됩니다. 그러나 'Python'은 물론 정의되지 않은 Python 변수로 해석되어 오류가 발생합니다. 아래는 그것을 이해하는 코드입니다 -
>>> x = "Python" >>> repr(x) "'Python'" >>> x1 = eval (repr(x)) >>> x == x1 True
따라서 __str__의 반환 값을 eval에 대한 인수로 호출하려고 하면 실패합니다.
>>> y = "Python" >>> str(y) 'Python' >>> y1 = eval(str(y)) Traceback (most recent call last): File "<pyshell#51>", line 1, in <module> y1 = eval(str(y)) File "<string>", line 1, in <module> NameError: name 'Python' is not defined
둘의 차이점을 보여주는 또 다른 예는 -
입니다.>>> import datetime >>> now = datetime.datetime.now() >>> str(now) '2019-03-29 01:29:23.211924' >>> repr(now) 'datetime.datetime(2019, 3, 29, 1, 29, 23, 211924)'
위의 출력에서 str(now)는 now 값을 포함하는 문자열을 계산하는 반면 repr(now)는 now 객체를 다시 작성하는 데 필요한 파이썬 코드를 반환합니다.
주요 차이점
str() | repr() |
---|---|
객체를 읽을 수 있도록 만들기 | 객체를 재현하는 필수 코드 |
최종 사용자에게 출력 생성 | 개발자를 위한 출력 생성 |
클래스에 대해 __str__ 및 __repr__을 작성할 때 위의 사항을 고려해야 합니다.