본문 바로가기

Programming/Python

__str__ 과 __repr__

0.__str__과 __repr__


1. 개요

파이썬에서 매우 자주 쓰이고 은근히 햇갈린느 두 메소드에 대해 다뤄본다.

__str_ 과 __repr__로써 이 둘은 객체를 사용자가 이해할 수 있는 문자열로 반환하는 함수다.

2. 이해

2.1 str, __str__

''__str__'' 를 본적이 없더라도 str 함수는 많이들 접해봤을 것이다.

어떠한 일련의 작업 이후 정수 또는 소수 등의 자료형을 출력하거나, 병합(Concat)등의 작업을 할 떄 str 함수를 통해 많이들 가공하기 때문이다.

str은 입력 받은 객체의 문자열 버전을 반환하는 함수이다. 이때 주요시 봐야하는 요점은 str은 내장 함수가 아니라, 파이썬 내장 클래스라는 것이다. 사실 str클래스의 생성자 메소드를 실행하고, 그 인자값을 전달하는 것이다.

그렇다면 str__str__은 무슨 상관관계가 있을까?

이는 파이썬의 OOP와 관련되어 있다. 파이썬에는 내장된 많은 자료형들에, 해당하는 자료형에 대한 연산을 정의하는 메소드들이 있다.

다시말해, str, repr 함수가 인스턴스의 __str__, __repr__ 메소드를 각각 호출한다고 이해할 수 있다.

2.2 repr, __repr__

repr 이란 'Representation' 의 약자로 '표현하다' 의미를 갖는다.

표현은 어떠한 객체의 '본질' 보다는 외부에 노출되는, 사용자가 이해할 수 있는 객체의 모습을 표현한다.

repr, __rer__의 관계 또한 앞서 설명한 str, __str__의 관계와 동일하다.

어떠한 객체를 인자로 하여 rper함수를 실행시키면 해당 객체의 클래스에 정의된 __repr__ 를 실행하여 그 결과를 반환하도록 한다.

3. __str__ 과 __repr__의 공통점

  • 두 메소드는 객체의 문자열 표현을 반환한다.

    • 두 메소드는 객체가 어떠한 데이터 타입인지 상관없이 객체의 문자열 버전을 반환한다.

      이에는 '왜 문자열 표현인가?' 이라는 질문을 야기할 수 있다. 왜냐하면 일반적 문자열은 파이썬을 사용하는 모든 인간들이 이해할 수 있는 일반적인 interface이기 때문이다.

4. 둘의 주요차이점

이 둘의 차이점은 본질적으로 의도된 사용처가 다르다는 것이다.

  • __str__태생적 목적 자체가 인자를 '문자열'화 하여 반환하는 것이다.

    • 이는 서로 다른 데이터 타입이 interaction하기 위한 좋은 인터페이스가 된다.

    • 따라서, __str__ 의 본질적인 목적은 객체를 '표현'하는 것(epresentation) 보다는 추가적 가공이나 다른 데이터와의 호환을 위하여 문자열화 하는것이다.

    • __repr__본 목적이 객체를 인간이 이해할 수 있는 평문으로 '표현'하는 것이다.

      • __str__서로 다른 자료형 간 인터페이스를 제공하기 위한 목적으로 존재한다면, __repr__해당 객체를 인간이 이해할 수 있는 표현으로 나타내기 위한 용도이다.

 

'Programming > Python' 카테고리의 다른 글

Stack  (0) 2019.10.07
Doubly Linked Lists  (0) 2019.10.07
Linked List  (0) 2019.10.02
표준 라이브러리  (0) 2017.11.13
예외 처리  (0) 2017.11.13