继续获取AttributeError并不确定为什么[关闭]

问题描述 投票:0回答:1
def gcd(n, d):
        if n==0 or d==0:
            return 1
        while(n != d):
            if(n > d):
                n = n - d
            else:
                d = d - n
        return n

class Fraction:
    def __init__(self, n, d):
        self.num = int(n / gcd(abs(n), abs(d)))
        self.denom = int(d / gcd(abs(n), abs(d)))
        if self.denom < 0:
            self.denom = abs(self.denom)
            self.num = -1 * self.num
        elif self.denom == 0:
            raise ZeroDivisionError
    def __str__(self):
        if type(self) is tuple:
            if self[1] < 0:
                return '%s/%s' %(self[0], -1*self[1])
            else:
                return '%s/%s' %(self[0], self[1])
        elif self.denom == 1:
            return str(self.num)
        else:
            return '%s/%s' %(self.num, self.denom)

    def __add__(self, other):
        return self.num*other.denom + self.denom*other.num, self.denom*other.denom

    def __sub__(self, other):
        return self.num*other.denom - self.denom*other.num, self.denom*other.denom

    def __mul__(self, other):
        return self.num*other.num, self.denom*other.denom

    def __div__(self, other):
        return self.num*other.denom, self.denom*other.num

    def __eq__(self, other):
        if self.num == other.num and self.denom == other.denom:
            return "Equal"
        else:
            return "Not Equal"


f1 = Fraction(2, 4)
f2 = Fraction(4, 20)
add = Fraction.__add__(f1, f2)
sub = Fraction.__sub__(f1, f2)
eq = Fraction.__eq__(f1, f2)
mul = Fraction.__mul__(f1, f2)
div = Fraction.__div__(f1, f2)
print("Fraction one: "+str(Fraction.__str__(f1))+"\n"+"Second Fraction: "+str(Fraction.__str__(f2))+"\n"+"Add: "+str(Fraction.__str__(add))+"\n"+"Subtract: "+str(Fraction.__str__(sub))+"\n"+"Multiply: "+str(Fraction.__str__(mul))+"\n"+"Divide: "+str(Fraction.__str__(div))+Fraction.__str__(eq))

所以我的作业要求我做一个分数函数,但是我的代码不断出现以下错误,我不确定为什么:

Traceback (most recent call last):
  File "G:\Workshops\Week9.py", line 57, in <module>
    print("Fraction one: "+str(Fraction.__str__(f1))+"\n"+"Second Fraction: "+str(Fraction.__str__(f2))+"\n"+"Add: "+str(Fraction.__str__(add))+"\n"+"Subtract: "+str(Fraction.__str__(sub))+"\n"+"Multiply: "+str(Fraction.__str__(mul))+"\n"+"Divide: "+str(Fraction.__str__(div))+Fraction.__str__(eq))
  File "G:\Workshops\Week9.py", line 26, in __str__
    elif self.denom == 1:
AttributeError: 'str' object has no attribute 'denom'
python python-3.x fractions
1个回答
1
投票

他们希望您使用__定义方法,但这不是您use方法的方式。

__add__例如是+。而不是写

add = Fraction.__add__(f1, f2)

只需写

add = f1 + f2

[所有其他数学运算符以及__str__(内置str内置函数也是如此)。

您的主要问题是eq是字符串*,并且您在编写时将其传递给__str__方法

Fraction.__str__(eq)

这意味着self内的__str__string,而不是Fraction,这意味着self.denom正试图获得denom字符串self的]属性。

因为您将eq作为字符串,所以只需更改

Fraction.__str__(eq)

eq

*不过,__eq__不应返回字符串。这不是不允许的,但是它很奇怪并且使__eq__不太有用。刚有

def __eq__(self, other):
    return self.num == other.num and self.denom == other.denom

然后将上面提到的修复程序更改为

str(eq)
© www.soinside.com 2019 - 2024. All rights reserved.