본문 바로가기

일단 해보기

파이썬 __str__ 메쏘드

 

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에 두 개의 오브젝트를 추가했다. 그 결과는 다음과 같다. 해당 오브젝트가 어떤 내용인지 알아보기 힘들다.

 

__str__ 미정의 상태

 

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 필드에 담긴 값이 반환되어 사용자가 알아보기 편해진 것을 확인할 수 있다.

 

question_text를 __str__ 메쏘드로 반환해준 모습

 

 

3. 파이썬의 다른 클래스에서는 어떻게 사용할까?

__str__은 파이썬 자체의 메쏘드다. 그래서 실제 파이썬에서는 어떻게 사용되는지 알아봤다. 우리가 흔히 사용하는 list도 클래스의 한 종류다. 실제로 리스트를 정의하고 타입값을 출력했을 때 class 'list'로 반환되는 것을 볼 수 있다.

dir을 이용해 list 클래스가 담고있는 메쏘드를 출력해봤다. __str__을 사용할 수 있다고 돼있다. list는 어떤 값을 __str__로 반환시킬까?

확인 결과, 메모리 주소를 반환하는 것을 볼 수 있었다.