如何使用实例激活__str__ dunder方法并修复错误:“ __ str__返回了非字符串(类型NoneType)”

时间:2019-06-23 12:12:32

标签: python python-3.x class

我一直在尝试创建一个有理类,并添加一个__str__ dunder方法以返回p(分子)除以q(分母)。当我尝试打印对象Rational_1时,它仅给我提供 init 方法的输出,而根本不返回__str__ dunder方法。因此,我尝试使用print而不是return,但是会引发错误:"__str__ returned non-string (type NoneType)"。我如何打印str并且不引发错误?谢谢!

import math
class Rational:
    def __init__(self,p,q):
        self.p=p
        self.q=q
    def __str__(self):
        self.great_dev=math.gcd(self.p,self.q)
        self.p=self.p/self.great_dev
        self.q=self.q/self.great_dev
        print ("{self.p}/{self.q}".format(self=self))
rational_1=Rational(3,60)
print(rational_1)

1 个答案:

答案 0 :(得分:1)

如错误所述,您需要return用覆盖的__str__ dunder方法创建的类实例的新字符串表示形式。

def __str__(self):
    self.great_dev=math.gcd(self.p,self.q)
    self.p=self.p/self.great_dev
    self.q=self.q/self.great_dev
    # return the updated string representation
    return "{self.p}/{self.q}".format(self=self)

然后将使用代码,输出将为1.0/20.0