Python: !r 문자열 형식과 __repr__() 및 __str__() 메서드.
문자열 형식 !r의 사용 예:
fmt_data = '{!r:^12} {!r:^15} {!r:^10}'
!r에서 PEP 3101 – Advanced String Formatting 상태:
!r - convert the value to a string using repr().
repr() 및 str() 공식 문서는 다음 링크에서 찾을 수 있습니다. ="_blank">객체.__str_(자신)
원래:
repr(object) 호출 class str(object='') ; 우리는 나중에 우리 자신의 코드로 구현합니다.
object.__repr_(self) 호출 https://docs.python.org/3/reference/datamodel.html#object ; 우리는 나중에 우리 자신의 코드로 구현합니다.
repr(object)의 목적은 객체 인스턴스에 대해 사람이 읽을 수 있는 친숙한 문자열 표현을 제공하는 것입니다.
object.__repr__(self)의 목적은 개체 인스턴스의 문자열 표현을 제공하는 것이며, class str(object='') 함수는 이 문자열을 가져와 문자열이 생성된 동일한 원래 개체 인스턴스로 변환할 수 있어야 합니다.
예를 들어 설명하겠습니다.
class Person( object ):
def __init__( self, given_name, surname ):
self.__given_name = given_name
self.__surname = surname
def __repr__( self ):
fmt = u"{}(given_name='{}', surname='{}')"
return fmt.format( self.__class__.__name__, \
self.__given_name, self.__surname )
def __str__( self ):
fmt = u"{}: Given Name: '{}', Surname: '{}')"
return fmt.format( self.__class__.__name__, \
self.__given_name, self.__surname )
-- 이 예제를 다른 곳에서 복사했는지 궁금할 경우를 대비하여... 😂, 이 주제를 설명하는 데 사용되는 매우 인기 있는 예제이며 약간의 조정도 했습니다.
작동 방식을 살펴보겠습니다.
person = Person( 'Văn Bé Hai', 'Nguyễn' )
# My full name, written in Vietnamese: Nguyễn Văn Bé Hai 😂
print( person.__str__() )
print( str( person ) )
print( '---' )
print( person.__repr__() )
print( repr( person ) )
예상대로 object_instance.__str__() 및 str( object_instance ) 의 출력은 동일합니다. object_instance.__repr__() 및 repr( object_instance )도 마찬가지입니다.
Person: Given Name: 'Văn Bé Hai', Surname: 'Nguyễn')
Person: Given Name: 'Văn Bé Hai', Surname: 'Nguyễn')
---
Person(given_name='Văn Bé Hai', surname='Nguyễn')
Person(given_name='Văn Bé Hai', surname='Nguyễn')
계속해서 person.__repr__()이 object.__str__(self)과 어떻게 작동하는지 살펴보겠습니다.
repr_str = person.__repr__()
person1 = eval( repr_str )
print( str( person1 ) )
예상대로 작동합니다.
Person: Given Name: 'Văn Bé Hai', Surname: 'Nguyễn')
이제 객체 인스턴스 person 및 person1을 사용하여 !r 문자열 형식을 시도합니다.
print( '"person" instance reads: {!r}'.format(person) )
print( '"person1" instance reads: {!r}'.format(person1) )
그리고 우리는 다음을 얻습니다.
"person" instance reads: Person(given_name='Văn Bé Hai', surname='Nguyễn')
"person1" instance reads: Person(given_name='Văn Bé Hai', surname='Nguyễn')
-- !r 형식은 결국 __repr__()을 호출합니다.
Person 클래스로 돌아가서 두 변수 fmt에서 중괄호 쌍( '{}') 주위의 큰 작은따옴표를 제거하고 {!r}을 사용할 수 있습니다.
class Person( object ):
...
def __repr__( self ):
# fmt = u"{}(given_name='{}', surname='{}')"
fmt = u"{}(given_name={!r}, surname={!r})"
...
def __str__( self ):
# fmt = u"{}: Given Name: '{}', Surname: '{}')"
fmt = u"{}: Given Name: {!r}, Surname: {!r})"
...
마지막으로 이 게시물의 시작 부분에 나열된 예를 살펴보겠습니다. fmt_data = '{!r:^12} {!r:^15} {!r:^10}' -- 이 공식 문서를 참조하십시오object.__str__(self). 훨씬 더 많은 정보를 위해. 간단히 말해서 ^는 지정된 너비 내에서 문자열을 중앙에 배치합니다. 이 예에서 너비는 각각 12, 15 및 10입니다. 세 개의 부울 필드가 있고 중간에 테이블 형식으로 표시하고 싶습니다. 길이가 다른 3개의 헤더 중:
create_own = False
create_other = False
view_own = True
fmt_header = '{:^12} {:^15} {:^10}'
fmt_data = '{!r:^12} {!r:^15} {!r:^10}'
print( fmt_header.format('Create Own', 'Create Other', 'View Own' ) )
print( fmt_data.format(create_own, create_other, view_own) )
출력은 다음과 같습니다.
Create Own Create Other View Own
False False True
이것이 "!r 문자열 형식은 특정 경우에 사용하기에 편리한 형식입니다."에서 의미하는 바입니다.
Python은 문자열 형식화 측면에서 많은 것을 제공하는 것 같습니다. 저는 이 정보가 매우 유용하다고 생각합니다. 그리고 당신도 그러길 바랍니다. 나는 확실히 이 포스트를 쓰는 것을 즐긴다. 읽어주셔서 감사하고 항상 안전하세요.
Reference
이 문제에 관하여(Python: !r 문자열 형식과 __repr__() 및 __str__() 메서드.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/behainguyen/python-the-r-string-format-and-the-repr-and-str-methods-29i7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)