在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
,但我在问为什么要这样做。
答案 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.