在创建时修改 class 的实例

Modifying an instance of a class when it is created

我有这个代码:

class Fraction:
    def __init__(self, top, bottom):
        self.num = top
        self.den = bottom
        self = self.to_lowest_form()

    def to_lowest_form(self):
        from math import gcd

        d = 0
        while d != 1:
            d = gcd(self.num, self.den)
            self.num //= d
            self.den //= d

        return Fraction(self.num, self.den)

    def __add__(self, other):
        pass

如上面的代码所示,我需要得到一个分数,然后在初始化后将其转化为最低形式。 (我得到一个 RecursionError 我知道为什么)。

所以我的问题是如何将新创建的 分数 转换为其最低项(以避免调用 instance.lowest_form() 在每个方法中) ?

to_lowest_form 方法中减少 numerator/denominator 时返回 Fraction 的新实例,而不是返回减少的数字本身,这只会让事情变得更复杂。考虑将减少的数字保留为属性,内部计算它们的减少形式后。

实现示例:

from math import gcd

class Fraction:
    def __init__(self, top, bottom):
        self.num, self.den = self.reduce(num=top, den=bottom)

    @staticmethod
    def reduce(num, den):
        d = 0
        while d != 1:
            d = gcd(num, den)
            num //= d
            den //= d
        return num, den