WeniVooks

검색

파이썬 클래스 톺아보기

매직 메서드 - 문자열 표현

1. __str__ 메서드

__str__ 메서드는 객체를 사람이 읽기 쉬운 문자열로 표현할 때 사용하는 메서드입니다. str() 함수나 print() 함수를 호출할 때 자동으로 호출됩니다.

class Person: def __str__(self): return "사람입니다" person = Person() print(person)

2. __repr__ 메서드

__repr__ 메서드는 객체를 표현하는 공식적인 문자열을 반환합니다. 주로 디버깅이나 개발 중에 객체의 상태를 확인하는 데 사용됩니다. repr() 함수를 호출하거나, 대화형 콘솔에서 객체를 직접 참조할 때 호출됩니다.

class Person: def __str__(self): return "사람입니다" def __repr__(self): return "Person()" person = Person() print(person) # 비교해보세요. __str__이 호출됩니다. print([person]) print(repr(person))

3. __str____repr__의 차이점

  1. 용도의 차이
  • __str__: 최종 사용자를 위한 읽기 쉬운 형태
  • __repr__: 개발자를 위한 상세한 정보
  1. 호출 우선순위 __str__이 정의되지 않은 경우, Python은 __repr__을 대신 사용합니다.
class Person: def __init__(self, name): self.name = name def __repr__(self): return f"Person(name='{self.name}')" person = Person("홍길동") print(person) # __str__이 없어도 __repr__이 호출됨

4. 좋은 구현 방법

  1. __repr__은 가능하면 객체를 재생성할 수 있는 형태로 구현
  2. __str__은 사용자가 이해하기 쉬운 형태로 구현
  3. __repr__은 객체 안에 담겼을 경우 알아보기 쉬운 형태로 구현
class Number: def __init__(self, value): self.value = value def __repr__(self): return f"Number({self.value})" def __str__(self): return str(self.value) num = Number(42) print(f"str(): {num}") # 사용자 친화적 print(f"repr(): {repr(num)}") # 개발자 친화적

여기서 3번은 예를 들어 아래와 같이 리스트에 담겼을 때를 말합니다. 여기서 모든 문자열을 다 출력해주는 것은 비효율적이 될 수 있으므로 적절히 처리해주는 것이 좋습니다.

예를 들어 인스턴스 변수가 100개이고, 이 인스턴스 변수가 리스트 안에 1000개가 들어있다면 출력하는데 꽤나 시간이 걸리고, 출력 결과도 너무 길어질 수 있습니다. 만약 이러한 경우라면 아래 있는 인스턴스 변수 중 일부만 출력하는 것도 좋은 방법입니다.

class Book: def __init__(self, title, authors, price): self.title = title self.authors = authors self.price = 0 def __repr__(self): return f"Book(title='{self.title}', authors={self.authors}, price={self.price})" book = Book("파이썬 프로그래밍", ["licat", "mura"], 30000) print(book)
{"packages":["numpy","pandas","matplotlib","lxml"]}
3.2 매직 메서드3.4 매직 메서드 - 숫자 표현