Django를 이용해 웹을 배포하려 하다가 의문이 생겼다. Django는 DB를 models.py파일을 이용, 테이블을 클래스로 만들어 쉽게 관리가 가능하다. 예시들을 찾아보다보니 클래스 말미에 아래와 같이 __str__을 정의해 주는 경우가 많았다. 해당 메쏘드에 대한 의문점이 생겨서 간단히 찾아봤다.
__str__ 메쏘드는 왜 사용할까?
__str__ 는 해당 클래스로 만들어진 인스턴트를 자체를 출력할 때, 문자열로 설명해주기 위한 메쏘드다. Django의 models.py에서는 class가 admin 페이지에서 어떻게 출력되는지 정의해주는 역할이라 볼 수 있겠다. 필자도 글로만 읽으니 잘 와닿지 않아 직접 실험해봤다.
1. __str__ 미사용시
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
위와 같이 __str__을 정의하지 않아도 서버를 돌리는데는 오류가 나지 않는다.
서버가 돌아가는 것을 확인한 뒤, admin페이지에서 question에 두 개의 오브젝트를 추가했다. 그 결과는 다음과 같다. 해당 오브젝트가 어떤 내용인지 알아보기 힘들다.
2. __str__ 메쏘드 이용
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
이번에는 __str__메쏘드를 이용해봤다. 반환할 내용은 question_text로 지정했다. 실행결과는 아래와 같다. question_text 필드에 담긴 값이 반환되어 사용자가 알아보기 편해진 것을 확인할 수 있다.
3. 파이썬의 다른 클래스에서는 어떻게 사용할까?
__str__은 파이썬 자체의 메쏘드다. 그래서 실제 파이썬에서는 어떻게 사용되는지 알아봤다. 우리가 흔히 사용하는 list도 클래스의 한 종류다. 실제로 리스트를 정의하고 타입값을 출력했을 때 class 'list'로 반환되는 것을 볼 수 있다.
dir을 이용해 list 클래스가 담고있는 메쏘드를 출력해봤다. __str__을 사용할 수 있다고 돼있다. list는 어떤 값을 __str__로 반환시킬까?
확인 결과, 메모리 주소를 반환하는 것을 볼 수 있었다.
'일단 해보기' 카테고리의 다른 글
[Ubuntu] Ubuntu 16.04의 connect: Network is unreachable 오류 (0) | 2020.01.02 |
---|---|
[Python] Class에 대한 수다 (1) | 2019.09.28 |
파이썬 가상환경 설정 (0) | 2019.06.29 |
파이썬으로 클립보드 제어하기 (0) | 2019.06.24 |
티스토리에서 PDF를 바로 읽어보자 (1) | 2019.05.31 |