如何更改Python类的字符串表示形式?
在Java中,我可以重写类的如何更改Python类的字符串表示形式?,python,string,python-3.x,printing,Python,String,Python 3.x,Printing,在Java中,我可以重写类的toString()方法。然后,Java的print函数打印由其toString()定义的对象的字符串表示形式。是否有一种Python等价于Java的toString() 例如,我有一个PlayCard类。我有一个PlayCard的实例c。现在: >>> print(c) <__main__.Card object at 0x01FD5D30> 如何自定义类实例的字符串表示形式 我正在使用Python3.x与Java的toString最
toString()
方法。然后,Java的print函数打印由其toString()
定义的对象的字符串表示形式。是否有一种Python等价于Java的toString()
例如,我有一个PlayCard类。我有一个PlayCard的实例c。现在:
>>> print(c)
<__main__.Card object at 0x01FD5D30>
如何自定义类实例的字符串表示形式
我正在使用Python3.x与Java的
toString
最接近的等价物是为您的类实现\uuu str\uuu
。将其放入类定义中:
def __str__(self):
return "foo"
您可能还希望实现\uuuu repr\uuu
以帮助调试
有关更多信息,请参见此处:
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
生成字符串表示,该字符串表示似乎可以访问该内部属性。下面是一个简单的例子来证明这一点:
b=A('b')
打印b
产生
'""'
'a'
当
json.dumps({'b':b})
产生
'""'
{“b”:“b”}
因此,您可以看到一些本机库使用内部表示,可能是出于性能原因
有关更多详细信息,请参见此文档:Wow,这是一个非常旧的文档版本;)
s/release\/2.5.2\/
OP说他正在使用python 3。不需要对对象进行子分类。Dude repr Resolver我认为不需要“a”的任何输出。Json序列化不看函数,只看属性,类A不包含任何属性,只有三个函数。Json dumps将对象视为字典,并将所有键转换为STR。我不太清楚为什么要混合使用“to string”和Json.dumps
,这是两种完全不同的东西。