str () 및 () 보고서
print()
문장 디버깅 코드, 특히 엿보기 대상의 내용을 사용하려고 시도한다.우리가 주피터 노트북과 같은 상호작용 환경에서 일할 때 이 점은 특히 정확하다.하나의 예는 추가 작업 후에 목록의 내용을 볼 수 있습니다.원소를 목록에 추가하고 print()
그것을 사용해 보았을 때 어떤 일이 일어날지 아주 간단한 예를 들자.lst = list()
for x in range(3):
lst.append(x)
print(lst)
>>[0]
>>[0, 1]
>>[0, 1, 2]
우리는 우리가 목록 대상을 인쇄할 때, 목록 대상은 사용자가 이해할 수 있는 출력을 받는다는 것을 보았다.이제 비슷한 일을 다시 시도해 봅시다.이번에는 사용자 정의 대상을 인쇄해 보겠습니다.먼저 간단한 클래스 "Bike"를 정의합니다.class Bike:
def __init__(self,brand,size):
self.brand = brand
self.size = size
object_bike = Bike("Fixie","Medium")
print(object_bike)
>> <__main__.Bike object at 0x7fda39054e50>
우리는 목록 대상을 인쇄할 때 사용자가 list
대상의 출력을 이해할 수 있음을 보았다.이제 비슷한 일을 다시 시도해 봅시다.이번에는 사용자 정의 대상을 인쇄해 보겠습니다.먼저 간단한 클래스 "Bike"를 정의합니다.여기에서, 우리가 자신의 대상을 정의하고 문장을 인쇄하려고 시도할 때.우리는 상당히 심오한 수출을 얻었다
<__main__.Bike object at 0x7fda39054e50>
.현재 이 출력은 최종 사용자나 개발자에게도 쓸모가 없다.이것이 바로
__str__
와 __repr__
의 줄거리다.이것들은 모두 특수한 기능으로 우리의 대상을 더욱 쉽게 이해할 수 있도록 다시 쓸 수 있다.자바를 사용하는 개발자도 비슷한 것toString()
을 사용하여 같은 목표를 실현했다.만약python 문서를 읽는다면, 우리는 다음과 같은 신비로운 해석을 얻을 수 있다
__str__()
와 __repr__()
는 대상에 대해 문자열을 표시할 수 있도록 합니다.지금 더욱 곤혹스러운 것은 왜 두 가지 다른 방법으로 같은 일을 실현할 수 있느냐는 것이다.이 두 가지 기능은 모두 물체의 문자열 해석을 제공하기 위한 것이다.하지만 다른 시청자들에게는__str__
기능의 목표 사용자는 대상을 이해할 수 있는 비공식적인 정의를 원하는 사용자이다.__repr__
는 대상을 더욱 정식으로 정의하는 데 쓰인다.우리가 이전의 자전거 수업에서 그것을 실현할 때, 이것은 더욱 의미가 있을 것이다.class Bike:
def __init__(self,brand,size):
self.brand = brand
self.size = size
def __str__(self):
return f" ----Bike object----\n brand:{self.brand} \n size:{self.size} "
object_bike = Bike("Fixie","Medium")
print(object_bike)
>> ---- Bike object ----
brand: Fixie
size: Medium
현재, 우리가 대상의 실례에서 print () 를 사용할 때, 우리는 대상이 무엇인지를 설명하는 데 더욱 유용한 출력을 얻을 수 있다.이제 이 대상의 __repr__
실현을 살펴봅시다.class Bike:
def __init__(self,brand,size):
self.brand = brand
self.size = size
def __str__(self):
return f" ----Bike object----\n brand:{self.brand} \n size:{self.size} "
def __repr__(self):
return f"Bike({self.brand!r},{self.size!r})"
object_bike = Bike("Fixie","Medium")
repr(object_bike)
>> "Bike('Fixie','Medium')"
주의: "세부 사항 실현"부분에서 왜 f 문자열에서 "! r"을 사용하는지 토론할 것입니다.현재 우리는
repr(object)
를 사용하고 있으며, 우리는 서로 다른 출력을 얻었다.이것은 개발자를 대상으로 한 것으로, 예를 들어 대상을 어떻게 초기화해야 하는지에 대한 공식적인 정의를 많이 제공했다.사실상, 우리는 리퍼의 출력을 사용하여 대상을 다시 만들 수 있다.또한 repr 출력은 문자열임을 나타내는 인용부호를 가지고 있음을 주의하십시오.우리는 다음 예시에서 왜 리퍼가 문자열 출력을 하는지 이해할 것이다.
class Bike:
def __init__(self,brand,size):
self.brand = brand
self.size = size
def __str__(self):
return f" ----Bike object----\n brand:{self.brand} \n size:{self.size} "
def __repr__(self):
return f"Bike({self.brand!r},{self.size!r})"
object_bike = Bike("Fixie","Medium")
repr(object_bike)
# notice that the output is encased as a string
>> "Bike('Fixie','Medium')"
new_object = eval(repr(object_bike))
new_object.brand
>> "Fixie"
new_object.size
>> "Medium"
여기서 우리가 repr
를 사용할 때 개발자는 대상이 어떻게 만들어졌는지 이해할 수 있고 eval()
함수를 사용하여 대상을 다시 만들 수 있다.주의해야 할 점은 __str__
를 사용하여 같은 출력을 만들면 같은 값의 문자열을 만들지 않기 때문에 eval
와 함께 사용할 수 없다는 것이다.
class Bike:
def __init__(self,brand,size):
self.brand = brand
self.size = size
def __str__(self):
return f"Bike({self.brand},{self.size})"
def __repr__(self):
return f"Bike({self.brand!r},{self.size!r})"
y = Bike("Fixie","Medium")
str(y)
# notice its not a string
>> Bike(Fixie,Medium)
repr(y)
# a string representation
>> "Bike('Fixie','Medium')"
현재, 우리가 사용한 repr
을 자세히 살펴보면,python에서 f-strings와 함께 사용하면, 출력을 하나의 !r
로 포장해서 문자열로 표시할 것이다. 예를 들어, 우리가 위의 예시에서 사용하지 않았다면 ''
, 우리의 출력은
repr(y)
>> "Bike(Fixie,Medium)"
{% endhighlight %}
instead we want
{% highlight python %}
repr(y)
>> "Bike('Fixie','Medium')"
One thing to add is that repr() need not be always a strict definition of a function. We can have whatever output we want. But its a general convention to have
__repr__
to have a formal object definition while__str__
to be the understandable output to an object.
심어진 디테일
!r
실현하고, 없으면 __str__
출력을 되돌려줍니다.__repr__
와 __str__
의 출력을 더 자세히 보면 __repr__
의 출력은 문자열 형식이 될 것이며''로 묶여 있음을 알 수 있다.이것은 문자열을 매개 변수로 필요로 하는 함수 __repr__
에서 __repr__
의 출력을 사용할 수 있게 한다.이것이 바로 우리가 eval()
사용한 __repr__
f 문자열을 되돌릴 때, 대상이 정확한 문자열 표시 형식을 가지도록 자동으로 전의 서열 문자 출력을 추가하는 이유입니다.!r
__repr__
와 __str__
에서 얻은 재미있는 관찰 결과들이다.만약 내가 심각한 잘못을 저질렀다면, 반드시 나에게 메일을 보내야 한다.참고 문헌
Reference
이 문제에 관하여( str () 및 () 보고서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sachsom95/str-and-repr-2c3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)