我一直在尝试创建一个有理类,并添加一个__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)
答案 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