복붙노트

[PYTHON] __str__ 및 __repr__의 목적은 무엇입니까?

PYTHON

__str__ 및 __repr__의 목적은 무엇입니까?

파이썬에서 __str__과 __repr__이 어디에서 사용되는지 이해하지 못합니다. 제 말은 __str__이 객체의 문자열 표현을 반환한다는 것입니다. 그런데 왜 그게 필요할까요? 어떤 유스 케이스 시나리오에서? 또한, 나는 __repr__의 사용법에 대해서 읽었다.

하지만 내가 이해할 수없는 것은, 어디에서 사용하겠습니까?

해결법

  1. ==============================

    1.__repr__

    __repr__

    __str__

    클래스가있는 경우 __str__을 사용하십시오.이 객체를 문자열의 일부로 사용할 때마다 정보 / 비공식 출력을 원합니다. 예 : Django 모델에 대해 __str__ 메소드를 정의 할 수 있습니다. 그러면 Django 관리 인터페이스에서 렌더링됩니다. <모델 객체>와 같은 것 대신 사람의 성과 이름, 이벤트의 이름과 날짜 등을 얻을 수 있습니다.

    __repr__과 __str__은 비슷합니다. 사실 때때로 동일합니다 (표준 라이브러리의 sets.py에있는 BaseSet 클래스의 예제).

    def __repr__(self):
        """Return string representation of a set.
    
        This looks like 'Set([<list of elements>])'.
        """
        return self._repr()
    
    # __str__ is the same as __repr__
    __str__ = __repr__
    
  2. ==============================

    2.둘 다 많이 사용하는 곳은 대화 형 세션입니다. 객체를 출력하면 __str__ 메쏘드가 호출됩니다. 반면에 객체만을 사용한다면 __repr__이 표시됩니다 :

    둘 다 많이 사용하는 곳은 대화 형 세션입니다. 객체를 출력하면 __str__ 메쏘드가 호출됩니다. 반면에 객체만을 사용한다면 __repr__이 표시됩니다 :

    >>> from decimal import Decimal
    >>> a = Decimal(1.25)
    >>> print(a)
    1.25                  <---- this is from __str__
    >>> a
    Decimal('1.25')       <---- this is from __repr__
    

    __str__은 가능한 한 사람이 읽을 수 있도록 만들어졌지만 __repr__은 객체를 다시 만드는 데 사용할 수있는 무언가를 목표로해야하지만이 경우와 같이 정확하게 생성 된 방식이 아닐 수도 있습니다.

    __str__과 __repr__ 모두 동일한 값을 반환하는 경우도 드문 일이 아닙니다 (확실히 내장 된 유형의 경우).

  3. ==============================

    3.Grasshopper는 의심의 여지가있을 때 산에 가서 고대 텍스트를 읽습니다. 그 (것)들에서 __repr __ ()는 :

    Grasshopper는 의심의 여지가있을 때 산에 가서 고대 텍스트를 읽습니다. 그 (것)들에서 __repr __ ()는 :

  4. ==============================

    4.이전 답을 작성하고 더 많은 예제를 보여줍니다. 제대로 사용하면 str과 repr의 차이가 명확합니다. 간단히 말해서 repr은 객체의 정확한 상태를 재구성하기 위해 복사 붙여 넣기가 가능한 문자열을 반환해야하지만 str은 디버깅 결과를 기록하고 관찰하는 데 유용합니다. 다음은 알려진 라이브러리의 여러 출력을 보여주는 몇 가지 예제입니다.

    이전 답을 작성하고 더 많은 예제를 보여줍니다. 제대로 사용하면 str과 repr의 차이가 명확합니다. 간단히 말해서 repr은 객체의 정확한 상태를 재구성하기 위해 복사 붙여 넣기가 가능한 문자열을 반환해야하지만 str은 디버깅 결과를 기록하고 관찰하는 데 유용합니다. 다음은 알려진 라이브러리의 여러 출력을 보여주는 몇 가지 예제입니다.

    print repr(datetime.now())    #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
    print str(datetime.now())     #2017-12-12 18:49:27.134452
    

    str은 로그 파일에 인쇄하는 것이 좋으며, 직접 실행하거나 명령으로 파일에 덤프하려는 경우 repr을 다시 사용할 수 있습니다.

    x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
    
    print repr(np.array([1,2,3,4,5])) #array([1, 2, 3, 4, 5])
    print str(np.array([1,2,3,4,5]))  #[1 2 3 4 5]
    

    Numpy에서 repr은 다시 직접 소비 할 수 있습니다.

    class Vector3(object):
        def __init__(self, args):
            self.x = args[0]
            self.y = args[1]
            self.z = args[2]
    
        def __repr__(self):
            return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
    
        def __str__(self):
            return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
    

    이 예에서 repr은 직접 소비 / 실행될 수있는 문자열을 반환하지만 str은 디버그 출력으로 더 유용합니다.

    v = Vector3([1,2,3])
    print repr(v)    #Vector3([1,2,3])
    print str(v)     #Vector(x:1, y:2, z:3)
    
  5. ==============================

    5.str은 비공식적이고 읽기 쉬운 형식이지만 repr은 공식 객체 표현을 제공합니다.

    str은 비공식적이고 읽기 쉬운 형식이지만 repr은 공식 객체 표현을 제공합니다.

    class Complex:
        # Constructor
        def __init__(self, real, imag):
            self.real = real
            self.imag = imag
    
        # "official" string representation of an object
        def __repr__(self):
            return 'Rational(%s, %s)' % (self.real, self.imag)
    
        # "informal" string representation of an object (readable)
        def __str__(self):
            return '%s + i%s' % (self.real, self.imag)
    
        t = Complex(10, 20)
    
        print (t)     # this is usual way we print the object
        print (str(t))  # this is str representation of object 
        print (repr(t))  # this is repr representation of object   
    
    Answers : 
    
    Rational(10, 20) # usual representation
    10 + i20      # str representation
    Rational(10, 20)  # repr representation
    
  6. from https://stackoverflow.com/questions/3691101/what-is-the-purpose-of-str-and-repr by cc-by-sa and MIT license