파이썬 클래스의 문자열 표현을 어떻게 변경합니까? [복제]
이 질문에는 이미 답변이 있습니다.
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/
'Programming' 카테고리의 다른 글
Object.getOwnPropertyNames 대 Object.keys (0) | 2020.05.12 |
---|---|
자녀의 자식 값을 기반으로 요소를 선택하는 XPath (0) | 2020.05.12 |
Android에서 JS 번들을로드하지 못했습니다. (0) | 2020.05.12 |
스프링 부트에서 application.yml 또는 bootstrap.yml에 속성을 넣는 것의 차이점은 무엇입니까? (0) | 2020.05.12 |
Python3에서 '이진 문자열'을 일반 문자열로 변환하는 방법은 무엇입니까? (0) | 2020.05.12 |