sna*_*ile 198 python printing string python-3.x
在Java中,我可以覆盖toString()我的类的方法.然后Java的print函数打印由其定义的对象的字符串表示toString().有没有相当于Java的Python toString()?
例如,我有一个PlayCard课程.我有一个PlayCard的实例c.现在:
>>> print(c)
<__main__.Card object at 0x01FD5D30>
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
>>> print(c)
A?
Run Code Online (Sandbox Code Playgroud)
如何自定义类实例的字符串表示形式?
我正在使用Python 3.x.
Mar*_*ers 255
与Java最接近的toString是__str__为您的类实现.把它放在你的类定义中:
def __str__(self):
return "foo"
Run Code Online (Sandbox Code Playgroud)
您可能还希望实现__repr__以帮助调试.
浏览此处获取更多信息:
see*_*eeg 32
这并不像看起来那么容易,一些核心库函数在只覆盖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)
Run Code Online (Sandbox Code Playgroud)
产生
'""'
Run Code Online (Sandbox Code Playgroud)
并不是
'"a"'
Run Code Online (Sandbox Code Playgroud)
正如所料.
编辑:回答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/