두잇 두두 2025. 2. 5. 23:13
728x90

repr은 Python에서 객체의 문자열 표현을 반환하는 내장 함수입니다. 주로 디버깅 및 로깅에 사용되며, repr(obj)를 호출하면 obj.__repr__() 메서드가 실행됩니다.

repr의 특징

  • 객체를 프로그래머가 이해할 수 있는 형식으로 표현
  • 가능하면 객체를 재생성할 수 있는 문자열을 반환
  • eval(repr(obj)) == obj가 성립하는 것이 이상적

repr vs str

  • repr(obj): 객체의 명확하고 공식적인 표현 (디버깅용)
  • str(obj): 객체의 사용자 친화적인 표현 (출력용)
import datetime

now = datetime.datetime.now()

print(repr(now))  # datetime.datetime(2025, 2, 5, 14, 30, 45, 123456)
print(str(now))   # 2025-02-05 14:30:45.123456

__repr__ 메서드 정의하기

사용자 정의 클래스에서 repr()을 의미 있게 만들려면 __repr__을 직접 정의해야 합니다.

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

    def __repr__(self):
        return f"Person(name={self.name!r}, age={self.age})"

p = Person("Alice", 30)
print(repr(p))  # Person(name='Alice', age=30)

위 코드에서 !r은 repr()을 사용해 문자열을 표현하도록 만듭니다.

언제 repr을 사용해야 할까?

  • 디버깅 시 객체를 명확하게 표현할 때
  • 객체의 직렬화(예: eval(repr(obj)))가 필요할 때
  • 로그 기록에서 객체 상태를 명확하게 남길 때