首页 文章

如何更改Python类的字符串表示形式? [重复]

提问于
浏览
174

这个问题在这里已有答案:

在Java中,我可以覆盖我的类的 toString() 方法 . 然后Java的print函数打印由 toString() 定义的对象的字符串表示 . 是否有一个Python等同于Java的 toString()

例如,我有一个PlayCard课程 . 我有一个PlayCard的实例c . 现在:

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

但我想要的是:

>>> print(c)
A♣

如何自定义类实例的字符串表示形式?

我正在使用Python 3.x.

2 回答

  • 29

    与Java的 toString 最接近的是为您的类实现 __str__ . 把它放在你的类定义中:

    def __str__(self):
         return "foo"
    

    您可能还想实现 __repr__ 来帮助调试 .

    浏览此处获取更多信息:

  • 226

    这并不像看起来那么容易,当只有 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"'
    

    正如所料 .

    EDIT :回答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/

相关问题