[PYTHON] __str__ 및 __repr__의 목적은 무엇입니까?
PYTHON__str__ 및 __repr__의 목적은 무엇입니까?
파이썬에서 __str__과 __repr__이 어디에서 사용되는지 이해하지 못합니다. 제 말은 __str__이 객체의 문자열 표현을 반환한다는 것입니다. 그런데 왜 그게 필요할까요? 어떤 유스 케이스 시나리오에서? 또한, 나는 __repr__의 사용법에 대해서 읽었다.
하지만 내가 이해할 수없는 것은, 어디에서 사용하겠습니까?
해결법
-
==============================
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.둘 다 많이 사용하는 곳은 대화 형 세션입니다. 객체를 출력하면 __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.Grasshopper는 의심의 여지가있을 때 산에 가서 고대 텍스트를 읽습니다. 그 (것)들에서 __repr __ ()는 :
Grasshopper는 의심의 여지가있을 때 산에 가서 고대 텍스트를 읽습니다. 그 (것)들에서 __repr __ ()는 :
-
==============================
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.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
from https://stackoverflow.com/questions/3691101/what-is-the-purpose-of-str-and-repr by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 float의 이진 표현 (16 진수가 아닌 비트) (0) | 2018.10.04 |
---|---|
[PYTHON] 파이썬 : 바인딩 소켓 : "이미 사용중인 주소" (0) | 2018.10.04 |
[PYTHON] 파이썬에서 개인 및 보호 된 메소드의 상속 (0) | 2018.10.04 |
[PYTHON] 고급 중첩 목록 이해 구문 (0) | 2018.10.04 |
[PYTHON] 내장 모듈과 이름이 같은 모듈을 가져 오려고하면 가져 오기 오류가 발생합니다. (0) | 2018.10.04 |