【问题标题】:How to apply __str__ function when printing a list of objects in Python在 Python 中打印对象列表时如何应用 __str__ 函数
【发布时间】:2011-04-03 06:37:05
【问题描述】:

这个交互式 python 控制台 sn-p 会告诉一切:

>>> class Test:
...     def __str__(self):
...         return 'asd'
...
>>> t = Test()
>>> print(t)
asd
>>> l = [Test(), Test(), Test()]
>>> print(l)
[__main__.Test instance at 0x00CBC1E8, __main__.Test instance at 0x00CBC260,
 __main__.Test instance at 0x00CBC238]

基本上我想在打印列表时打印三个asd 字符串。我也尝试过pprint,但结果相同。

【问题讨论】:

    标签: python list object printing string


    【解决方案1】:

    试试:

    class Test:
       def __repr__(self):
           return 'asd'
    

    并阅读此documentation link

    【讨论】:

      【解决方案2】:

      其他答案中实施__repr__ 的建议绝对是一种可能性。如果无论出于何种原因(现有类型,__repr__ 出于美学以外的原因等原因)这都不可行,那么就这样做

      print [str(x) for x in l]
      

      或者,正如某些人肯定会建议的那样,map(str, l)(只是更紧凑一点)。

      【讨论】:

        【解决方案3】:

        你需要创建一个__repr__ 方法:

        >>> class Test:
            def __str__(self):
                return 'asd'
            def __repr__(self):
                return 'zxcv'
        
            
        >>> [Test(), Test()]
        [zxcv, zxcv]
        >>> print _
        [zxcv, zxcv]
        

        参考docs

        object.__repr__(self)

        repr() 内置函数和字符串转换(反引号)调用,以计算对象的“官方”字符串表示。如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。如果这不可能,则应返回<...some useful description...> 形式的字符串。返回值必须是字符串对象。如果一个类定义了__repr__() 但没有定义__str__(),那么当需要该类实例的“非正式”字符串表示时,也会使用__repr__()

        这通常用于调试,因此表示信息丰富且明确是很重要的。

        【讨论】:

        • 从答案中提供的文档来看,如果使用 repr,我似乎不需要 str 定义。感谢您的意见。
        • @Blink_:这取决于你到底想要什么。使用我定义的类,将print Test() 的输出与print [Test()] 进行比较。
        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 2012-11-15
        • 2011-02-07
        • 1970-01-01
        • 2019-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多