programing

Python 클래스의 문자열 표현을 변경하려면 어떻게 해야 합니까?

goodjava 2022. 12. 30. 17:05

Python 클래스의 문자열 표현을 변경하려면 어떻게 해야 합니까?

Java 에서는 I can'thernet을 오버라이드 할 수 있습니다.toString()내 수업의 방법.그런 다음 Java의 인쇄 함수는 오브젝트에 의해 정의된 오브젝트의 문자열 표현을 인쇄합니다.toString()자바와 동등한 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__디버깅에 도움이 됩니다.

상세한 것에 대하여는, 여기를 참조해 주세요.

이것은 보기만큼 쉽지 않습니다. 일부 핵심 라이브러리 함수는 스트링만 덮어쓰면 작동하지 않습니다(Python 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의 코멘트에 대한 답변:

unicode에는 속성이 없습니다.불변의 문자열로, 값은 숨겨져 있어 높은 수준의 Python 코드에서는 사용할 수 없습니다.json모듈 사용re이 내부 Atribute에 액세스 할 수 있다고 생각되는 문자열 표현을 생성합니다.이를 정당화할 수 있는 간단한 예를 다음에 제시하겠습니다.

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