__repr__, __str__의 차이점

2024. 3. 20. 15:20·프로그래밍 언어/파이썬

__repr__와 __str__는 파이썬에서 객체를 문자열로 표현하기 위해 사용되는 두 가지 매직 메소드입니다. 이 둘은 비슷해 보일 수 있지만, 사용 목적과 호출되는 상황에서 차이가 있습니다.

__repr__ 메소드:

  • __repr__의 주 목적은 객체의 공식적인 문자열 표현을 제공하는 것입니다. 이 문자열은 가능한 한 해당 객체를 정확하게 나타낼 수 있어야 합니다. 이상적으로는, __repr__에 의해 반환된 문자열을 사용하여 해당 객체를 재생성할 수 있을 정도로 정확해야 합니다(예: eval(repr(object)) == object).
  • __repr__는 주로 개발자가 사용하며, 디버깅과 로깅에서 유용하게 활용됩니다.
  • 파이썬 인터프리터에서 객체를 단독으로 평가했을 때 보이는 결과는 __repr__ 메소드에 의해 반환된 문자열입니다.
  • 객체의 __str__ 메소드가 구현되어 있지 않은 경우, 파이썬은 __repr__을 대신 호출합니다.

__str__ 메소드:

  • __str__의 목적은 객체의 "비공식적인" 또는 "출력하기 쉬운" 문자열 표현을 제공하는 것입니다. 이는 일반 사용자가 이해하기 쉬운 형태로 되어야 합니다.
  • __str__는 print() 함수나 str() 내장 함수가 호출될 때 사용됩니다.
  • __str__의 구현은 객체를 사람이 읽기 편한 형태로 표현하는 데 중점을 둡니다.

차이점 요약:

  • __repr__은 객체의 개발자 친화적인 표현을 제공하며, 이상적으로는 객체의 정확한 표현을 나타냅니다. __repr__의 결과는 객체를 재생성하는 데 사용할 수 있는 정도로 정확해야 합니다.
  • __str__은 객체의 사용자 친화적인 표현을 제공하며, 최종 사용자가 읽기 쉬운 형태로 정보를 출력하는 데 사용됩니다.
  • __str__이 구현되어 있지 않으면 __repr__이 대체로 사용되며, 객체를 문자열로 표현할 필요가 있을 때 언제나 __repr__은 호출될 수 있습니다.

일반적으로, 모든 클래스에 __repr__을 구현하는 것이 좋으며, 사용자에게 보다 친숙한 문자열 표현이 필요할 때 __str__을 추가로 구현합니다.

코드 예시

아래는 __repr__과 __str__ 매직 메소드를 사용하는 간단한 파이썬 코드 예시입니다. 이 코드는 Person 클래스를 정의하고, 두 메소드의 차이점을 보여주기 위해 각각을 구현합니다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        # 객체를 정확하게 표현하며, 가능하면 이 문자열을 사용해 동일한 객체를 재생성할 수 있어야 함
        return f"Person('{self.name}', {self.age})"

    def __str__(self):
        # 사용자가 읽기 쉬운 형태로 객체를 표현함
        return f"{self.name} is {self.age} years old."

# Person 객체 생성
person = Person("John Doe", 30)

# __repr__ 메소드 호출: 대화형 인터프리터나 repr() 함수 사용 시
print(repr(person))  # 출력: Person('John Doe', 30)

# __str__ 메소드 호출: print() 함수 또는 str() 함수 사용 시
print(person)  # 출력: John Doe is 30 years old.

설명:

  • __init__ 메소드는 Person 클래스의 객체가 생성될 때 이름과 나이를 초기화합니다.
  • __repr__ 메소드는 Person 객체의 개발자 친화적인 표현을 제공합니다. 이 예제에서는 Person 객체를 재생성할 수 있는 파이썬 표현식을 문자열로 반환합니다. 이 방식은 디버깅과 로깅에 유용하게 사용될 수 있습니다.
  • __str__ 메소드는 Person 객체를 사용자 친화적인 방식으로 표현합니다. 이는 최종 사용자가 객체에 대해 읽을 때 직관적으로 이해할 수 있는 형태로 정보를 제공합니다. print(person)을 호출하면 이 메소드가 사용됩니다.

이 예시는 __repr__과 __str__이 어떻게 다르게 사용될 수 있는지를 보여줍니다. 일반적으로, __repr__은 개발자를 위한 것이며, __str__은 최종 사용자를 위한 것입니다.

저작자표시 (새창열림)

'프로그래밍 언어 > 파이썬' 카테고리의 다른 글

Call by Assignment란?  (0) 2024.03.20
r string, u string이란  (0) 2024.03.20
__new__, __init__ 차이점  (1) 2024.03.20
매직메소드란?  (0) 2024.03.20
MRO(Method Resolution Order)  (0) 2024.03.20
'프로그래밍 언어/파이썬' 카테고리의 다른 글
  • Call by Assignment란?
  • r string, u string이란
  • __new__, __init__ 차이점
  • 매직메소드란?
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ecs
    SAA
    DP
    그리디
    celery
    Spring WebFlux
    docker
    Redis
    EC2
    백준
    reactor
    완전탐색
    자바
    mybatis
    spring
    FastAPI
    취업리부트
    Docker-compose
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    항해99
    파이썬
    AWS
    Spring Boot
    java
    RDS
    Python
    프로그래머스
    WebFlux
    OOP
    시험
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
__repr__, __str__의 차이점
상단으로

티스토리툴바