Python 分数对象不';我没有整数,但整数(分数(…)仍然有效

Python 分数对象不';我没有整数,但整数(分数(…)仍然有效,python,int,fractions,python-internals,Python,Int,Fractions,Python Internals,在Python中,当您拥有一个对象时,可以使用int函数将其转换为整数 例如int(1.3)将返回1。这通过使用对象的\uuuuu int\uuuu魔术方法在内部工作,在这种特殊情况下是float.\uuuu int\uuu 在Python中,可以使用对象来构造精确的分数 from fractions import Fraction x = Fraction(4, 3) Fraction对象缺少\uuuu int\uuu方法,但您仍然可以对其调用int(),并返回一个合理的整数。我想知道在没有

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

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

在Python中,可以使用对象来构造精确的分数

from fractions import Fraction
x = Fraction(4, 3)
Fraction
对象缺少
\uuuu int\uuu
方法,但您仍然可以对其调用
int()
,并返回一个合理的整数。我想知道在没有定义
\uuu int\uu
方法的情况下,这是怎么可能的

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

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

使用
\uuu trunc\uu
方法

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


>>> int(X())
2
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

>>> 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'
>>X类(对象):
定义浮点数(自):
返回2。
>>>int(X())
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
int(X())
TypeError:int()参数必须是字符串、类似于对象的字节或数字,而不是“X”

显示何时使用
\uuuuu trunc\uuuuu

我的一个朋友找到了一个指向CPython源代码的链接,该链接显示何时使用
\uuuuuu trunc\uuuuu
。如果你不介意的话,我将把它编辑到你的答案中。有趣的是,Python文档中没有这一点——相反,对它的唯一引用是在PEP 3141上: