Python 의str__ 와repr__ 방법 대비

3617 단어 Pythonstrrepr
Strings 에서 대상 을 문자열 로 바 꾸 는 내용 을 읽 고repr함 수 를 소 개 했 습 니 다.Python 이 대상 을 대상 으로 하 는 생소 함 과 열 도 를 제대로 알 지 못 할 때 감성 적 으로reprstr두 함수 의 차 이 를 이해 해 보 세 요.
Python 의 전역 방법reprstr이 대상 에 비 치 는repr__ 와str__ 방법 호출,그리고str(obj)어떤 방법 을 호출 할 지,그리고print(obj)Python 코드 를 디 버 깅 할 때의 대상 은 어떤 방법 을 호출 할 지 표시 합 니 다.이것 이 바로 본문 이 실증 하고 자 하 는 내용 이다.
자바 의System.out.println(obj) "hello" + obj 가 자바 대상toString() 방법 을 호출 하 는 것 처럼 Python 에 서 는 어떻게 된 일 일 까?
어떤 Python 입문서 의 해석 repr str:
  • repr: formal string representation of a Python object
  • str:파 이 썬 객체 의 비공 식 string representation 또는 printable string representation
  • 우선 repr 은 representation 이라는 뜻 으로 하 나 는 정식 이 고 다른 하 나 는 비공 식 이 며repr보다 중요 해 보인다.
    내 장 된 Python 대상 에 대해 서 는str,repr,그리고print함수,예 를 들 어str유형 을 사용 할 수 있 습 니 다.
    
    >>> repr([1,2])
    '[1, 2]'
    >>> print([1,2])
    [1, 2]
    >>> str([1,2])
    '[1, 2]'
    그러나 구체 적 으로 위의 세 함수 에서 각각 list 의 어떤 방법 을 호출 했 는 지 알 수 없다.이때 자신의 종 류 를 정의 하면 문 제 를 가장 잘 설명 할 수 있다.테스트 환경 은 IntelliJ 로 디 버 깅 캡 처 로 각각list__str__ 몇 가지 조합 상황 을 설명 한다.
    정의 만str__ 방법.

    설명: __repr__ 방법 만 정 의 된 상황 에서
  • 디 버 깅 시 IntelliJ 는 줄 내 디 스 플레이 대상__str__ 의 출력 이지 만 변수 창 에 기본 __str__ 의 출력
  • 을 표시 합 니 다.
  • __repr__ 기본repr 방법
  • 을 계속 호출 합 니 다.
  • __repr__ 전환 함수 호출str방법
  • __str__ 호출print 방법
  • 정의 만repr__ 방법.

    설명:__str__ 방법 만 정 의 된 상황 에서 알 수 있 듯 이__repr__ 방법 은 매우 강하 고 모든 호출 을 독점 했다.__repr__ ,repr함수,심지어 IntelliJ 의 디 버 깅 디 스 플레이 는 반드시str방법 을 핵심 으로 해 야 한다.
  • 이상 의 모든 상황 은 호출repr__ 방법
  • 동시에 정의repr__ 와str__ 방법.

    설명:print __repr__ 방법 을 동시에 정의 한 상황 에서__repr__ 방법 은 오히려 되 돌 릴 수 있다.명확 한__str__ 호출__str__ 방법 과 디 버 깅 시 변수 창 에 표시 되 는 대상 호출repr방법 을 제외 하고 다른 때 는__repr__ 이 우세 하 다.구체 적
  • repr 와 IntelliJ 디 버 깅 시 변수 창 표시 변수 호출repr__ 방법
  • IntelliJ 디 버 깅 시 줄 내 디 스 플레이 변수 호출str__ 방법
  • str 전환 작업 은 대상 의 를 호출 했다.str__ 방법,이 는 informal 비공 식
  • 으로 해석 할 수 없다.
  • print 호출str__ 대상 출력 문자열 가 져 오기
  • 또한 문자열 을 포맷 할 때 호출 하 는 대상 방법 은__repr__ 때 와 같 습 니 다.예 를 들 어 아래 의 포맷 코드 와 같 습 니 다.
    
    f1 = "%s" % t
    f2 = "{}".format(t)
    Python 은 자바 처럼 문자열 에 대상 을 추가 하 는 것 을 모 릅 니 다.
    
    "this is " + t #Java       "this is " + t.toString()
    Python 은 다음 과 같은 오 류 를 보고 할 것 입 니 다.
    TypeError: can only concatenate str (not "Test") to str
    이+번 호 는 두 문자열 만 연결 할 수 있 습 니 다.__str__방법 과print 방법 이 정의 되 지 않 는 한 대응 관 계 는 각각
    
    t = Test()
    z1 = 'hello' + t #    t.__radd__('hello')
    z2 = t + 'hello' #    t.__add__('hello')
    파 이 썬__add__ 도 환상 적 이 야.
    지금까지 파 이 썬 의str__ 와repr__ 방법 대비 자세 한 내용 은 Pythonstr__ 와repr__ 의 자 료 는 우리 의 기타 관련 문장 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기