상세 컨텐츠

본문 제목

Magic Method (2) - __str__ 과 __repr__

개발/python-심화(Advanced)

by Matthew0633 2022. 4. 14. 23:48

본문

__str__ and __repr__

 

문자열을 활용한 단순예제로는 두 메소드 간에 차이를 알기 어려워 많은 reference를 찾아보았다. 두 메소드에 대한 개념은 목적 중심으로 생각할수록, 생각보다 간단한 개념이었다. 무엇이든 용도와 목적이 존재하고 이를 위해 사람이 만들었다는 것을 기억하자.

 

  • __str__ and __repr__ 공통점 :

      필요한 내용을 method 내에 정의하여 사용자에게 표시하기 위해 문자열 표현으로 반환하고자 할 때 사용한다

 

  • __str__ :
    • 인자인 객체를 사용자에게 표현하기 위한 값을 정의하고, 이를 “사용자가 읽기 쉬운 문자열 표현으로 변환” 하여 return 하기 위한 목적으로 주로 활용한다 (Readable, end-user format)
    • 좀 더 직관적으로는, 우리가 자주 사용하는 str(객체) 형태로 사용했을 때 해당 객체에 대해 사용자에게 무엇을 출력할래?” 에 해당하는 내용이 해당 method의 return 값으로 정의된다고 이해할 수 있다.
    • 즉, 우리가 설계한 Custom Class의 객체를 문자열로 표현하고자 할 때, str(객체)함수를 사용할 것인데, 이 때 출력되기를 기대하는 “객체에 대한 문자열 표현”을 return 값으로 정의하면 된다!
    • __str____repr__ 이 함께 정의되어 있다면, print(객체) 시에 __str__()이 호출된다

 

  • __repr__:
    • 인자인 객체를 사용자에게 표현하기 위함이지만, Debugging과 개발에 필요한 object 정보를 정의하고, 이를 사용자가 읽기 쉬운 "문자열 표현으로 변환” 하여 return하기 위한 목적으로 주로 활용한다.
    • 아래 코드 블럭에서 String 객체의 문자열 데이터로 예시를 들어보자. String Class 내에서 __str__이 return 하는 값은 해당 문자열 값을 나타내도록 정의하고 있지만, eval() 함수를 사용했을 때 해당 Object로 변환될 수 있는 엄밀한 객체정보는 아님을 알 수 있다. __repr__의 return 값은 이와 달리 eval()을 통해 원래 object에 속한 객체로 반환될 수 있는 문자열 표현을 반환하도록 정의했음을 알 수 있다.
myStr = "Aditya"
print("The string is:", myStr)
print("The output from the __repr__() method is:", myStr.__repr__())
print("The output from the __str__() method is:", myStr.__str__())
print(eval(myStr1))
print(eval(myStr2))
The string is: Aditya
The output from the __repr__() method is: 'Aditya'
The output from the __str__() method is: Aditya
Aditya
/usr/lib/python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.7) or chardet (3.0.4) doesn't match a supported version!
  warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Traceback (most recent call last):
  File "/home/aditya1117/PycharmProjects/pythonProject/webscraping.py", line 9, in <module>
    output2 = eval(myStr2)
  File "<string>", line 1, in <module>
NameError: name 'Aditya' is not defined

 

<Reference>
https://www.delftstack.com/howto/python/__str__-vs-__repr__-in-python

 

관련글 더보기

댓글 영역