문자열을 활용한 단순예제로는 두 메소드 간에 차이를 알기 어려워 많은 reference를 찾아보았다. 두 메소드에 대한 개념은 목적 중심으로 생각할수록, 생각보다 간단한 개념이었다. 무엇이든 용도와 목적이 존재하고 이를 위해 사람이 만들었다는 것을 기억하자.
__str__
and __repr__
공통점 :필요한 내용을 method 내에 정의하여 사용자에게 표시하기 위해 문자열 표현으로 반환하고자 할 때 사용한다
__str__
:
str(객체)
형태로 사용했을 때 해당 객체에 대해 사용자에게 무엇을 출력할래?” 에 해당하는 내용이 해당 method의 return 값으로 정의된다고 이해할 수 있다.str(객체)
함수를 사용할 것인데, 이 때 출력되기를 기대하는 “객체에 대한 문자열 표현”을 return 값으로 정의하면 된다!__str__
와 __repr__
이 함께 정의되어 있다면, print(객체) 시에 __str__()
이 호출된다
__repr__
:
__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
Magic Method (4) - __bool__ (0) | 2022.04.16 |
---|---|
Magic Method (3) - __add__, __mul__, __sub__, __le__, __ge__ (0) | 2022.04.15 |
Magic Method (1) - Magic Method의 정의 (0) | 2022.04.13 |
주석을 보여주는 __doc__ (0) | 2022.04.12 |
__dict__와 dir (0) | 2022.04.05 |
댓글 영역