在Java中,我可以重写类的toString()方法。然后,Java的print函数打印由toString()定义的对象的字符串表示形式。Python中是否有类似于Java的toString()?
例如,我有一个PlayCard类。我有一个PlayCard的实例c。现在:
>>> print(c)
<__main__.Card object at 0x01FD5D30>
但我想要的是:
>>> print(c)
A♣
我如何自定义我的类实例的字符串表示?
我使用的是Python 3.x
这并不像看起来那么简单,当只有str被覆盖时,一些核心库函数就不起作用了(用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来生成字符串表示,它似乎可以访问这个内部属性。这里有一个简单的例子来证明这一点:
b = A('b')
打印b
生产
'a'
而
json。转储({b: b})
生产
{" b ": " b "}
因此,您可以看到一些本机库使用内部表示,可能是出于性能原因。
更多详情请参见:http://www.laurentluce.com/posts/python-string-objects-implementation/
这并不像看起来那么简单,当只有str被覆盖时,一些核心库函数就不起作用了(用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来生成字符串表示,它似乎可以访问这个内部属性。这里有一个简单的例子来证明这一点:
b = A('b')
打印b
生产
'a'
而
json。转储({b: b})
生产
{" b ": " b "}
因此,您可以看到一些本机库使用内部表示,可能是出于性能原因。
更多详情请参见:http://www.laurentluce.com/posts/python-string-objects-implementation/