복붙노트

[PYTHON] 클래스 객체에 대한 사용자 정의 문자열 표현을 만드는 방법은 무엇입니까?

PYTHON

클래스 객체에 대한 사용자 정의 문자열 표현을 만드는 방법은 무엇입니까?

다음 클래스를 고려하십시오.

class foo(object):
    pass

기본 문자열 표현은 다음과 같습니다.

>>> str(foo)
"<class '__main__.foo'>"

이 디스플레이를 사용자 정의 문자열로 만들려면 어떻게해야합니까?

해결법

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

    1.클래스의 메타 클래스에서 __str __ () 또는 __repr __ ()을 구현하십시오.

    클래스의 메타 클래스에서 __str __ () 또는 __repr __ ()을 구현하십시오.

    class MC(type):
      def __repr__(self):
        return 'Wahaha!'
    
    class C(object):
      __metaclass__ = MC
    
    print C
    

    읽을 수있는 문자열을 의미하는 경우 __str__을 사용하고 모호하지 않은 표현에는 __repr__을 사용하십시오.

  2. ==============================

    2.

    class foo(object):
        def __str__(self):
            return "representation"
        def __unicode__(self):
            return u"representation"
    
  3. ==============================

    3.처음에 __repr__과 __str__ 중 하나를 선택해야한다면, 기본적으로 구현 __str__은 정의되지 않았을 때 __repr__을 호출합니다.

    처음에 __repr__과 __str__ 중 하나를 선택해야한다면, 기본적으로 구현 __str__은 정의되지 않았을 때 __repr__을 호출합니다.

    사용자 정의 벡터 3 예제 :

    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)
    
  4. from https://stackoverflow.com/questions/4932438/how-to-create-a-custom-string-representation-for-a-class-object by cc-by-sa and MIT license