gpt4 book ai didi

python - fractions.Fraction f-strings 作为 float with __format__

转载 作者:太空狗 更新时间:2023-10-30 01:24:39 36 4
gpt4 key购买 nike

在 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__

分数似乎可以/应该支持浮点格式规范。

有趣的是,它们用于 Decimal:

from decimal import Decimal
f = Decimal('1.1')
f'{f} as float {f:.3f}'

这对 Fraction 不起作用有什么原因吗?

是的,我知道我可以将 f'{f} 做为 float {float(f):.3f}' 但我想问的是为什么需要这样做。

最佳答案

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

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

def __str__(self):
return 'hello world'

如果我这样做

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

然后 y 将具有值 "Hello World" 。这是因为我获得了默认格式化程序,它调用我的 __str__

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

Help on method_descriptor:

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

关于python - fractions.Fraction f-strings 作为 float with __format__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192213/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com