Python中__add__函数返回值引发的输出格式异常问题
Fraction类加法方法返回值异常的问题解决
问题场景
用户实现的Fraction类__add__方法,内部计算完相加后的分数直接打印,但返回值为None。执行驱动代码时出现异常输出:先显示计算结果,再显示等式后跟None。
原代码
__add__方法实现
def __add__(self, rightSide): """ Purpose: Adds two fractions together to get the sum :param rightSide: Placeholder for second fraction to be calculated with original fraction :return: None """ numer = self.__numerator * rightSide.getDenominator() + self.__denominator * rightSide.getNumerator() denom = self.__denominator * rightSide.getDenominator() new_frac = Fraction(numer, denom) print(new_frac)
驱动代码
print(f'{frac_a} + {frac_b} = ', frac_a + frac_b)
实际输出
16/15 2/5 + 2/3 = None
问题原因
- 调用
frac_a + frac_b时,触发__add__方法,方法内部的print(new_frac)直接输出了计算结果16/15。 - 由于
__add__方法没有返回有效对象(默认返回None),frac_a + frac_b的结果就是None,导致驱动代码的print语句接着输出2/5 + 2/3 = None。
修复方案
修改__add__方法,移除内部的print语句,改为返回计算得到的Fraction对象:
def __add__(self, rightSide): """ Purpose: Adds two fractions together to get the sum :param rightSide: Placeholder for second fraction to be calculated with original fraction :return: The sum of the two fractions as a Fraction object """ numer = self.__numerator * rightSide.getDenominator() + self.__denominator * rightSide.getNumerator() denom = self.__denominator * rightSide.getDenominator() new_frac = Fraction(numer, denom) return new_frac
修复后效果
执行原驱动代码,输出会变为:
2/5 + 2/3 = 16/15
内容的提问来源于stack exchange,提问作者Riley Simpson
相关产品推荐
相关产品推荐

