首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用__format__将f字符串作为浮点型进行fractions.Fraction

使用__format__将f字符串作为浮点型进行fractions.Fraction
EN

Stack Overflow用户
提问于 2019-05-18 03:05:17
回答 1查看 640关注 0票数 5

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

代码语言:javascript
复制
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__

似乎浮点格式规范可以/应该支持Fractions

有趣的是,它们是针对Decimal

代码语言:javascript
复制
from decimal import Decimal
f = Decimal('1.1')
f'{f} as float {f:.3f}'

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-05-18 04:02:11

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

代码语言:javascript
复制
class MyClass:
    """A simple example class"""

    def __str__(self):
        return 'hello world'

如果我这样做了

代码语言:javascript
复制
x = MyClass()
y = f"{x}"

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

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

代码语言:javascript
复制
Help on method_descriptor:

__format__(self, format_spec, /)
    Default object formatter.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56192213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档