Programming

파이썬 클래스의 문자열 표현을 어떻게 변경합니까?

procodes 2020. 5. 12. 20:29
반응형

파이썬 클래스의 문자열 표현을 어떻게 변경합니까? [복제]


이 질문에는 이미 답변이 있습니다.

Java에서는 toString()클래스 메소드를 대체 할 수 있습니다 . 그런 다음 Java의 print 함수는로 정의 된 객체의 문자열 표현을 인쇄합니다 toString(). Java와 동등한 Python이 toString()있습니까?

예를 들어 PlayCard 클래스가 있습니다. PlayCard 인스턴스 c가 있습니다. 지금:

>>> print(c)
<__main__.Card object at 0x01FD5D30>

그러나 내가 원하는 것은 다음과 같습니다.

>>> print(c)
A♣

클래스 인스턴스의 문자열 표현을 어떻게 사용자 정의합니까?

Python 3.x를 사용하고 있습니다.


Java와 가장 가까운 것은 클래스 toString를 구현 __str__하는 것입니다. 이것을 클래스 정의에 넣으십시오.

def __str__(self):
     return "foo"

__repr__디버깅을 돕기 위해 구현할 수도 있습니다 .

자세한 내용은 여기를 참조하십시오.


이것은 쉬운 일이 아닙니다. str덮어 쓰면 일부 핵심 라이브러리 함수가 작동하지 않습니다 (파이썬 2.7로 확인).이 스레드를 참조하십시오. 예제 JSON을 직렬화 가능하게 만드는 방법 또한 시도하십시오

import json

class A(unicode):
    def __str__(self):
        return 'a'
    def __unicode__(self):
        return u'a'
    def __repr__(self):
        return 'a'

a = A()
json.dumps(a)

생산

'""'

그리고 아닙니다

'"a"'

예상대로.

편집 : mchicago의 의견에 답변 :

유니 코드에는 속성이 없습니다. 불변 문자열이며 그 값은 숨겨져 있으며 고급 파이썬 코드에서는 사용할 수 없습니다. json모듈 사용 re이 내부 속성에 대한 액세스가있는 것 스트링 표현을 생성. 이를 정당화하는 간단한 예는 다음과 같습니다.

b = A('b') print b

생산

'a'

동안

json.dumps({'b': b})

생산

{"b": "b"}

내부 표현이 성능상의 이유로 일부 네이티브 라이브러리에서 사용되는 것을 볼 수 있습니다.

자세한 내용은 다음을 참조하십시오. http://www.laurentluce.com/posts/python-string-objects-implementation/

참고 URL : https://stackoverflow.com/questions/4912852/how-do-i-change-the-string-representation-of-a-python-class

반응형