如何更改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/