如何比较 Python 中的 Fraction 对象?

How to compare Fraction objects in Python?

我有一个使分数相等的用例。在 Python.

中找到 fractions 模块

尝试使用像 <, == and > 这样的运算符,它似乎有效。

from fractions import Fraction
print(Fraction(5,2) == Fraction(10,4)) # returns True
print(Fraction(1,3) > Fraction(2, 3))  # return False

这是预期的比较方式吗?

找不到文档中明确指定的任何内容。

有人可以证实这一点吗(在提到它的地方用link)?

查看 implementation of the fraction module, 我们可以看到 __eq__ 被定义为:

def __eq__(a, b):
    """a == b"""
    if type(b) is int:
        return a._numerator == b and a._denominator == 1
    if isinstance(b, numbers.Rational):
        return (a._numerator == b.numerator and
                a._denominator == b.denominator)
    ...

__lt____gt__ 也是如此:

def __lt__(a, b):
    """a < b"""
    return a._richcmp(b, operator.lt)

def __gt__(a, b):
    """a > b"""
    return a._richcmp(b, operator.gt)

因此 ==</> 运算符将按预期工作。

请注意 documentation of Fraction,“分数 class 继承自抽象基础 class numbers.Rational,并从中实现所有方法和操作 class."

查看 documentation of Rational,我们发现它“子类型为 Real 并添加了分子和分母属性,这应该是最低限度的。”

对于 Real,我们发现:

To Complex, Real adds the operations that work on real numbers.

In short, those are: a conversion to float, math.trunc(), round(), math.floor(), math.ceil(), divmod(), //, %, <, <=, >, and >=.

最后 Complex:

Subclasses of this type describe complex numbers and include the operations that work on the built-in complex type. These are: conversions to complex and bool, real, imag, +, -, *, /, abs(), conjugate(), ==, and !=. All except - and != are abstract.

是的,这些操作已定义并记录在案。