开发者社区> 问答> 正文

在创建类的实例时对其进行修改

我有以下代码:

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

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

所以我的问题是如何将新创建的* fraction 转换为其最低期限(以避免在每种方法中调用 instance.lowest_form()*)?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:47:14 595 0
1 条回答
写回答
取消 提交回答
  • 通过减少to_lowest_form方法中的分子/分母时,返回一个新的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
    

    回答来源:stackoverflow

    2020-03-24 23:47:22
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载