__str__, __repr__ 차이

|

용법의 차이

  • str : 사용자가 보기 쉬운 형태로 보여줄 때 사용하는 것
  • repr : 시스템(python interpreter)이 해당 객체를 인식할 수 있는 공식적인 문자열로 나타내 줄 때 사용하는 것

호출 경로

print(a)하면 __str__이 불린다. print([a])하면 __repr__이 불린다.

__repr__만 만들면 __str__이 호출될 시에 __repr__이 불린다. 이는 __str__의 기본 구현이 __repr__을 부르는 구조라서 그렇다고한다.

쓰는 경우

나의 경우 __str__은 디버깅용 로그를 작성할 때, __repr__은 위의 용법에 최대한 맞추되, list를 가진 class이거나 한 경우 그냥 디버깅용으로 쓴다. 이 부분은 더 공부가 필요해보인다.

class dataSchema(object):
    def __init__(self, name: str, age: int):
        self.setProperty(name, age)

    def setProperty(self, name: str, age: int):
        self.name = name
        self.age  = age

    def getProperty(self):
        if self.age == -1:
            raise Exception('not setted.')
        return {'name': self.name, 'age': self.age}

    def __str__(self):
        return "(name : {}, age : {})".format(self.name, self.age)

    def __repr__(self):
        return "{}(\"{}\", {})".format(self.__class__.__name__, self.name, self.age)