分数.f字符串作为__format__的float

时间:2019-05-17 19:05:17

标签: python string-formatting fractions

在f字符串中使用fraction.Fraction时,我希望能够将其格式化为float。但是我得到了TypeError

from fractions import Fraction
f = Fraction(11/10)
f'{f} as float {f:.3f}'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported format string passed to Fraction.__format__

似乎{/ {1}}应该/应该支持浮点格式规范。

有趣的是,它们是针对Fractions的:

Decimal

是否有理由对from decimal import Decimal f = Decimal('1.1') f'{f} as float {f:.3f}' 不起作用?

是的,我知道我可以做Fraction,但我在问为什么要这样做。

1 个答案:

答案 0 :(得分:1)

如果您没有在类中实现__format__方法,那么您将自动获得默认的格式化程序,该格式化程序仅应用str方法。考虑

class MyClass:
    """A simple example class"""

    def __str__(self):
        return 'hello world'

如果我愿意

x = MyClass()
y = f"{x}"

然后y的值为"Hello World"。这是因为我得到了默认的格式化程序,称为我的__str__

我怀疑Fraction类就是这种情况,因为当您这样做时 help(Fraction.__format__) 你得到

Help on method_descriptor:

__format__(self, format_spec, /)
    Default object formatter.