gpt4 book ai didi

python - 分数对象没有 __int__ 但 int(Fraction(...)) 仍然有效

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

在 Python 中,当您有一个对象时,您可以使用 int 函数将其转换为整数。

例如 int(1.3) 将返回 1。这通过使用对象的 __int__ 魔术方法在内部工作,在这种特殊情况下 float.__int__

在 Python 中,Fraction 对象可用于构造精确分数。

from fractions import Fraction
x = Fraction(4, 3)

Fraction 对象缺少 __int__ 方法,但您仍然可以对它们调用 int() 并返回一个合理的整数。我想知道在没有定义 __int__ 方法的情况下这怎么可能。

In [38]: x = Fraction(4, 3)

In [39]: int(x)
Out[39]: 1

最佳答案

使用了__trunc__方法。

>>> class X(object):
def __trunc__(self):
return 2.


>>> int(X())
2

__float__ 不起作用

>>> class X(object):
def __float__(self):
return 2.

>>> int(X())
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
int(X())
TypeError: int() argument must be a string, a bytes-like object or a number, not 'X'

The CPython source显示何时使用 __trunc__

关于python - 分数对象没有 __int__ 但 int(Fraction(...)) 仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966227/

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