Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改Python类的字符串表示形式?_Python_String_Python 3.x_Printing - Fatal编程技术网

如何更改Python类的字符串表示形式?

如何更改Python类的字符串表示形式?,python,string,python-3.x,printing,Python,String,Python 3.x,Printing,在Java中,我可以重写类的toString()方法。然后,Java的print函数打印由其toString()定义的对象的字符串表示形式。是否有一种Python等价于Java的toString() 例如,我有一个PlayCard类。我有一个PlayCard的实例c。现在: >>> print(c) <__main__.Card object at 0x01FD5D30> 如何自定义类实例的字符串表示形式 我正在使用Python3.x与Java的toString最

在Java中,我可以重写类的
toString()
方法。然后,Java的print函数打印由其
toString()
定义的对象的字符串表示形式。是否有一种Python等价于Java的
toString()

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

>>> print(c)
<__main__.Card object at 0x01FD5D30>
如何自定义类实例的字符串表示形式


我正在使用Python3.x

与Java的
toString
最接近的等价物是为您的类实现
\uuu str\uuu
。将其放入类定义中:

def __str__(self):
     return "foo"
您可能还希望实现
\uuuu repr\uuu
以帮助调试

有关更多信息,请参见此处:


这并不像看上去那么容易,一些核心库函数在只覆盖str时不起作用(使用Python 2.7进行检查),请参阅此线程以获取示例 还有,试试这个

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.dumps({'b':b})

产生

'""'
{“b”:“b”}

因此,您可以看到一些本机库使用内部表示,可能是出于性能原因


有关更多详细信息,请参见此文档:

Wow,这是一个非常旧的文档版本;)
s/release\/2.5.2\/
OP说他正在使用python 3。不需要对对象进行子分类。Dude repr Resolver我认为不需要“a”的任何输出。Json序列化不看函数,只看属性,类A不包含任何属性,只有三个函数。Json dumps将对象视为字典,并将所有键转换为STR。我不太清楚为什么要混合使用“to string”和
Json.dumps
,这是两种完全不同的东西。