Python 3.9
파이썬에는 내장 함수가 구현되어 있습니다.
내장 함수란 자주 사용되는 기능들을 사전에 구현해 놓은 것입니다.
여러 내장 함수들이 있고 그중 __str__과 __repr__에 대해 알아보려 합니다.
시작하기에 앞서 우리가 보통 호출하는 str은 내장 함수 __str__과는 다른 것입니다.
str의 경우 흔히 아래와 같이 사용을 하고 있습니다.
a=3
print (type(a))
# <class 'int'>
str_a = str(a)
print (type(str_a))
# <class 'str'>
위의 예제에서 사용된 str은 내장 클래스를 사용한 것입니다.
str(a)는 str이라는 내장 클래스의 생성자 메소드를 이용하여 객체를 생성한 것입니다.
다시 내장 함수로 돌아가도록 하겠습니다.
class Color():
def __init__(self,name):
self.name = name
red = Color('red')
yellow = Color('yellow')
black = Color('black')
arr = [red, yellow, black]
for ar in arr:
print (ar)
<__main__.Color object at 0x00D663E8>
<__main__.Color object at 0x00D66448>
<__main__.Color object at 0x00D66478>
Color 함수를 정의하고 객체를 3개 만들었습니다.
이후 출력을 하였을 때 Color함수의 메모리 주소가 나오게 됩니다.
함수에 __str__, __repr__을 정의하지 않았기 때문입니다.
class Color():
def __init__(self,name):
self.name = name
def __str__(self):
return f'__str__: {self.name=}'
def __repr__(self):
return f'__repr__: {self.name=}'
red = Color('red')
yellow = Color('yellow')
black = Color('black')
arr = [red, yellow, black]
for ar in arr:
print (ar)
__str__: self.name='red'
__str__: self.name='yellow'
__str__: self.name='black
__str__ 함수와 __repr__함수를 추가한 뒤, 출력을 하였을 때 __str__의 함수가 호출되는 것을 확인할 수 있었습니다.
만약 __repr__함수만 정의하였을 때는 아래와 같이 출력됩니다.
__repr__: self.name='red'
__repr__: self.name='yellow'
__repr__: self.name='black'
위를 통해 출력을 할 때 __str__이 __repr__보다 우선순위가 높다는 것을 알 수 있었습니다.
그리고 위에서 arr이라는 리스트에 각 객체들을 담았는데 아래와 같이 호출을 하면 __repr__의 함수가 호출됩니다.
print(arr)
[__repr__: self.name='red', __repr__: self.name='yellow', __repr__: self.name='black']
만약 __repr__이 정의되지 않았다면 각 객체의 메모리주소가 출력됩니다.
위의 내용을 정리하면 클래스를 생성할 때 해당 클래스의 정보를 출력하기 위해 또는 표현하고자 하는 내용은
__str__과 __repr__을 통해 정의합니다.
그리고 이 두 내장 함수의 차이가 무엇인지에 대해 알아보았습니다.
__str__의 목적은 문자열화를 하여 서로 다른 객체 간의 정보를 전달하는 데 사용하는 것이고
__repr__은 인간이 이해할 수 있는 표현으로 나타내기 위한 것입니다.
즉 해당 클래스에 대해 사용자에게 정보를 전달하고 싶은 경우 __repr__을 사용하고
해당 클래스의 특정 데이터를 다른 객체들 간에 전달하고 싶은 경우 __str__을 사용하면 됩니다.
그래서 __str__이 우선순위가 더 높은 것이 아닐까 라는 생각이 됩니다.
출처 : Python 3.9.7 문서
https://docs.python.org/ko/3.9/library/functions.html
str 내장 클래스에 대한 설명
https://docs.python.org/ko/3.9/library/stdtypes.html#str
'Dev > Python' 카테고리의 다른 글
[Python] if val 과 if val is not None 어떤 것을 사용해야 하는가 (0) | 2021.11.08 |
---|---|
[django] ModelForm을 사용하여 데이터 등록 (0) | 2021.10.31 |
hash 값 생성 (0) | 2021.10.30 |
[Python] Garbage Collector (0) | 2021.10.19 |
[django] 관리자 계정 생성 (0) | 2021.10.18 |