__str__ |
str()
, format()
, print()
에 의해 호출되어 객체의 인쇄 가능한 비형식적(informal) 문자열 표현을 반환한다.
__repr__ |
repr()에 의해 호출되어 객체의 공식적(formal)인 문자열 표현을 반환한다.
개체를 다시 만드는 데 사용할 수 있는 유효한 파이썬 표현을 만든다.
class Ex:
pass
b = Ex()
print(repr(b))
#<__main__.Ex object at 0x000001F366546B20>
따로 형태가 정의되지 않으면 클래스 이름과 변수가 있는 메모리 주소를 기본형으로 출력한다.
(By default, it prints the module the object it's from, the class name, and the hexadecimal representation of its location in memory)
name = 'KIM'
print(repr(name))
#'KIM'
print(str(name))
#KIM
print(eval(repr(name)))
#KIM
print(eval(str(name)))
#Exception has occurred: NameError
#name 'KIM' is not defined
name
에 'KIM'
이라는 문자열을 저장했다.
repr
로 출력하면 따옴표로 감싸져 'KIM'
으로 출력된다.
str
로 출력하면 따옴표 없이 KIM
만 출력된다.
eval()
은 실행가능한 표현의 문자열을 인자로 사용하여 실행이 완료된 후 결과를 반환하는 함수이다.
eval
에 repr
을 주면 내용이 출력되지만, str
을 주면 NameError가 발생한다.
a = 'abc'
b = abc
#Exception has occurred: NameError
#name 'abc' is not defined
repr
은 따옴표로 감싼 형태를 반환한다 했다.
따옴표로 감싼 형태를 사용하면 a라는 객체를 만들어낼 수 있다.
str
가 반환한 따옴표가 없는 문자열 형태로는 새로운 객체를 만들 수 없다.
공식적이라는 말은 객체로 다시 사용할 수 있는 표현식이라는 뜻이다.
b = 3.141592
c = eval(repr(b))
print(b)
#3.141592
print(c)
#3.141592
print(id(b))
1934312784656
print(id(c))
1934310198320
b
를 가지고 만든 객체 c
를 보면 값은 같지만 새로운 객체가 만들어졌으므로 id값은 다르다. repr
이 반환한 값이 객체로 다시 사용되었음을 보여준다.
만약 클래스가 __str__
없이 __repr__
만 정의한다면, __repr__
은 비형식적인(informal) 문자열 표현이 요구될 때 사용되어 str
의 역할을 대신한다.
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬] 유튜브 영상 다운로드하고 mp4, mp3로 변환하기(pytube, ffmpeg) (0) | 2020.12.12 |
---|