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
'programing' 카테고리의 다른 글
| strstr과 strpos 중 어떤 방법이 선호됩니까? (0) | 2022.12.30 |
|---|---|
| Node.js에서 스택 트레이스를 인쇄하는 방법 (0) | 2022.12.30 |
| 기본 Java 설치의 cacerts 위치를 얻으려면 어떻게 해야 합니까? (0) | 2022.12.30 |
| 내장 오픈 기능에서의 모드 a, a+, w, w+, r+의 차이는 무엇입니까? (0) | 2022.12.30 |
| phpexcel을 사용하여 데이터를 읽고 데이터베이스에 삽입하려면 어떻게 해야 합니까? (0) | 2022.12.20 |