-
[python] 파이썬 __str__ 메서드에 대해코딩 연습/코딩배우기 2020. 9. 13. 13:26
■ 파이썬에서 어떤 값(또는 객체)을 문자열로 변환하는데 사용하는 str()은 내장 함수가 아닌 파이썬 내장 클래스이며, 객체를 만들고 그 객체의 정보(클래스 이름, 저장 위치 등)를 알고싶을 때 print(객체이름)를 사용하는데, 이는 object 클래스의 __str__ 메서드가 호출되어 반환된 문자열 정보이다.
>>> str <class 'str'> >>> >>> t = (1, 2, 3) >>> str(t) '(1, 2, 3)' >>> t.__str__() # == str(t) '(1, 2, 3)' >>> >>> >>> class Simple: ... def __init__(self): ... pass ... >>> s = Simple() >>> >>> print(s) <__main__.Simple object at 0x000002AFCE072D68> >>> >>> s.__str__() # str(s)와 같음 '<__main__.Simple object at 0x000002AFCE072D68>' >>>
■ 이러한 __str__의 문자열 반환 기능을 오버라이딩하여 쓸수 있다.(필요한 경우에 사용하면 좋음)
class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return '{0}: {1}'.format(self.name, self.age) def main(): p = Person('James', 23) print(p) # James: 23 --> __str__ 호출 main()
class InfoID: def __init__(self): pass def __str__(self): return "생성된 객체 id() : " + str(id(self)) def main(): a = InfoID() print(a) # 생성된 객체 id() : 2185199773232 --> __str__ 호출 main()
※ __str__이 print로 출력하는 일반 문자열을 표기하는 방식인 반면, __repr__은 객체 생성 방법을 알 수 있도록 하는 표준 문자열 표기 방식이라고 하는데, __str__, __repr__ 모두 파이썬 객체(파이썬의 모든 것)에 대해 문자열로 표현(반환)하는 것은 같다.
>>> class Simple: ... def __init__(self): ... pass ... >>> s = Simple() >>> >>> print(s) <__main__.Simple object at 0x000002AFCE072D68> >>> >>> s.__str__() '<__main__.Simple object at 0x000002AFCE072D68>' >>> >>> s.__repr__() '<__main__.Simple object at 0x000002AFCE072D68>' >>>
※ __str__ 과 __repr__ 의 차이점
>>> class Info_id: ... def __str__(self): ... return "id() : " + str(id(self)) ... >>> class Info_id: ... def __str__(self): ... return "id() : " + str(id(self)) ... def __repr__(self): ... return "나는 Info_id 클래스입니다." ... >>> Info_id <class '__main__.Info_id'> >>> print(Info_id) <class '__main__.Info_id'> >>> >>> i = Info_id() >>> i <------------------------ __repr__ 호출 나는 Info_id 클래스입니다. >>> print(i) <------------------ __str__ 호출 id() : 1873072891272 >>> >>> Info_id() <----------------- __repr__ 호출 나는 Info_id 클래스입니다. >>> print(Info_id()) <---------- __str__ 호출 id() : 1873072931504 >>>
[참고자료] 윤성우의 열혈파이썬 중급편
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 __slots__의 효과 (0) 2020.09.14 [python] 파이썬의 정보은닉(Information Hiding)과 __dict__ 메서드에 대해 (0) 2020.09.13 [python] 파이썬 __init__, __str__, __iter__, __next__ 등의 메서드 (0) 2020.09.12 [python] 파이썬 파일 쓰기, 읽기 - open(), read(), readline(), readlines() (0) 2020.09.11 [python] 파이썬 클래스 상속(inheritance) (0) 2020.09.10