파이썬 매직메서드로
__str__, __repr__ 이 있습니다.
둘다 객체의 문자열 표현을 반환한다는 특징을 가지고 있죠.
같은 기능을 하는데 왜 구분해놨을까?
차이를 한 번 살펴봅시다.
__str__ 메서드
- 객체의 "비공식적" 또는 사용자 친화적 문자열을 표현할 때 제공합니다.
- print() 함수나 str() 함수를 사용할 때 호출됩니다.
예제
class Book():
def __init__(self, title, author, page):
self.title = title
self.author = author
self.page = page
book = Book("Deeplearing", "architectyou", 20)
print(book)
원래 파이썬 객체를 print() 문을 이용해 출력하면 아래와 같이 객체라는 정보가 출력되죠.
그런데 __str__ 메서드를 사용하면 결과가 다릅니다.
class Book():
def __init__(self, title, author, page):
self.title = title
self.author = author
self.page = page
def __str__(self) :
return "이렇게 읽어줘요"
다음과 같이 __str__ 안에 있는 값을 바로 출력해줍니다.
사용자 친화적으로 문자열 그대로를 출력하기 위해 사용 합니다.
그렇다면 repr과의 차이가 뭘까요?
__repr__ 메서드
- 객체의 "공식적인" 문자열 표현을 제공합니다.
- 따라서 객체를 재생성 할 수 있는 정보를 포함합니다.
- 디버깅이나 개발 과정에서 객체의 상세 정보를 확인할 때 사용합니다.
- 주로 개발자를 위한 출력에 사용합니다.
예제
아까의 클래스 안에 다음과 같이 메서드가 추가 됐다고 생각해 봅시다.
def __repr__(self):
return f"Book(title='{self.title}', author='{self.author}', page={self.page})"
book = Book("Deeplearing", "architectyou", 20)
print(str(book))
print(repr(book))
repr_book = repr(book)
new_book = eval(repr_book)
print(new_book)
이를 출력해보면 아래와 같이 출력물이 나오는 것을 확인할 수 있습니다.
print 문을 사용했을때 __str__ 메서드와 __repr__ 메서드 모두
클래스 객체의 문자열 출력을 해 준다는 것은 변함없지만,
형태가 갖춰졌을 때, repr의 경우 또 다른 객체를 생성하는 형식으로 재 사용이 가능합니다.
기본적인 "문자열" 자체를 출력한다는 변함이 없지만,
사용자가 어떻게 사용하느냐에 따라 다른 것 같습니다.
기본적으로 클래스 내에 __str__ 메서드와 __repr__ 메서드가 동시에 존재할 때,
print() 문을 이용하여 출력하고자 하면
클래스는 __str__을 기본적으로 먼저 출력하고, repr 로 지정할 경우 repr을 출력합니다.
'딥러닝 기초 > Python' 카테고리의 다른 글
(ast 모듈) 파이썬 리스트 원소 타입 변경 : 문자열 [1, 2, 3, 4]가 입력으로 들어오는 경우 (1) | 2024.04.04 |
---|---|
Python 들어오는 개별 숫자로 전체 숫자 구성하기 (0) | 2024.01.04 |
Python 리스트 원소 뒤집기 (0) | 2024.01.04 |
Python 리스트 동일 원소 개수 세기 (try, except 구문) + 딕셔너리 정렬 하기 (1) | 2023.12.22 |