如何更改Python类的string表示forms?

在Java中,我可以重写我的类的toString()方法。 然后,Java的打印函数打印由toString()定义的对象的string表示forms。 有没有相当于Java的toString()的Python?

例如,我有一个PlayCard类。 我有一个PlayCard的实例c。 现在:

 >>> print(c) <__main__.Card object at 0x01FD5D30> 

但是我想要的是这样的:

 >>> print(c) A♣ 

如何自定义我的类实例的string表示forms?

我正在使用Python 3.x

与Java的toString最接近的是为你的类实现__str__ 。 把这个放在你的类定义中:

 def __str__(self): return "foo" 

你也可能想要实现__repr__来帮助debugging。

浏览此处获取更多信息:

  • 特殊方法名称 – 基本定制

这并不像看起来那么容易,当只有str被覆盖时,一些核心库函数不能工作(使用Python 2.7进行检查),请参阅此线程的示例如何创build类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没有任何属性 – 它是一个不可变的string,它的值是隐藏的,不能从高级Python代码中获得。 json模块使用re来生成似乎可以访问这个内部属性的string表示。 这是一个简单的例子来certificate这一点:

b = A('b') print b

产生

'a'

json.dumps({'b': b})

产生

{"b": "b"}

所以你会发现内部表示被一些本地库使用,可能是出于性能的原因。

另请参阅: http : //www.laurentluce.com/posts/python-string-objects-implementation/