【问题标题】:Python 3.x : how to get a representation of a class that return a float?Python 3.x:如何获取返回浮点数的类的表示形式?
【发布时间】:2014-06-04 15:34:10
【问题描述】:

我有一个返回浮点数的类,我想在__main__ 中打印它作为前一个类的表示,格式化为在浮点数上修剪一些数字。如果我重写 __str__ 方法,我显然会得到 TypeError 异常,如下例所示:

class override_str:
    def __str__(self):
        return(77.543)

if __name__=='__main__':
    print("float got by overriden __str__  : {:2f}".format(override_str()))

那么,我该如何“修复”?使用__repr__ 似乎没有帮助

【问题讨论】:

标签: python string class presentation


【解决方案1】:

您可以实现__format__() special method 来自定义您的自定义类如何被插入到字符串格式中:

class SpecialFormat:
    def __format__(self, format_spec):
        if format_spec.endswith('f'):
            return format(77.543, format_spec)
        return 'Unknown format'

这将委托给format() function 来处理实际的格式设置,但它为您提供了一个挂钩来确定您的自定义对象所请求的格式。

__format__ 方法传递完整的Format Specification Mini Language string。像__str__ 一样,你仍然需要返回一个字符串对象。

演示:

>>> 'Formatted as float: {:.2f}'.format(SpecialFormat())
'Formatted as float: 77.54'
>>> 'Formatted as float: {}'.format(SpecialFormat())
'Formatted as float: Unknown format'

【讨论】:

    【解决方案2】:

    您可以在返回之前将浮点数转换为__str__ 方法中的字符串。

    class my_str:
        def __str__(self):
            return str(77.543)
    
    >>> a = my_str()
    >>> a
    <__main__.my_str instance at 0x02783288>   # a is an instance of my_str
    
    >>> print a    # calls the __str__ method
    77.543
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 2011-01-21
      • 2019-08-21
      • 1970-01-01
      • 2010-11-05
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多