在Java中,我可以覆盖我班级的toString()
方法。然后Java的print函数打印由其toString()
定义的对象的字符串表示。是否有一个Python等同于Java的toString()
?
例如,我有一个PlayCard课程。我有一个PlayCard的实例c。现在:
>>> print(c)
<__main__.Card object at 0x01FD5D30>
但我想要的是:
>>> print(c)
A♣
如何自定义类实例的字符串表示形式?
我正在使用Python 3.x
答案 0 :(得分:243)
与Java toString
最接近的是为您的班级实施__str__
。把它放在你的班级定义中:
def __str__(self):
return "foo"
您可能还希望实施__repr__
以帮助调试。
有关详细信息,请参阅此处:
答案 1 :(得分:31)
这并不像看起来那么简单,当只有 str 被覆盖时(使用Python 2.7检查),某些核心库函数不起作用,请参阅此主题以获取示例 How to make a class JSON serializable 另外,试试这个
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')
print b
产生
'a'
,而
json.dumps({'b': b})
产生
{"b": "b"}
因此您可能会看到内部表示由某些本机库使用,可能是出于性能原因。
有关详细信息,请参阅此内容:http://www.laurentluce.com/posts/python-string-objects-implementation/