Python 用静态法计算分数

Python 用静态法计算分数,python,python-3.x,list,python-requests,Python,Python 3.x,List,Python Requests,我在做一个任务,我有一个分数类,它包含了如何加、减、乘和除分数的函数。我在创建将添加2个分数的添加函数时遇到问题,此函数必须使用static方法。这是我到目前为止编写的代码: class Fraction: def __init__(self,num1=0,num2=0): self.num1=num1 self.num2=num2 def __str__(self): while self.num1>self.num2:

我在做一个任务,我有一个分数类,它包含了如何加、减、乘和除分数的函数。我在创建将添加2个分数的添加函数时遇到问题,此函数必须使用static方法。这是我到目前为止编写的代码:

class Fraction:
    def __init__(self,num1=0,num2=0):
        self.num1=num1
        self.num2=num2
    def __str__(self):
        while self.num1>self.num2:
            a = self.num1//self.num2
            b = self.num1 % self.num2
            if self.num2==1:
                return "%s"%(self.num1)
            elif self.num1 % self.num2==0:
                return  "%s"%(self.num1/self.num2)
            else:
                return "%s+%s|%s"%(a,b,self.num2)
        if self.num1==0:
            return "0"
        elif self.num1 or self.num2 < 0 and self.num1==self.num2:
            return "-1"
        elif self.num2==1:
            return "%s"%(self.num1)
        elif self.num1==self.num2:
            return "1"
        else:    
            return "%s|%s"%(self.num1,self.num2)
    
    @staticmethod
    def add(a,b):
        a=Fraction(n,d)
        b=Fraction(num,den) 
        if a.d == b.den and a.n<a.d or b.num<b.den:
            return "%s|%s"%(a.n+b.num,a.d)
        elif a.d != b.den:
            return "%s|%s"%((a.n*b.den)+(a.d*b.num),(a.d*b.den))

这就是输出的样子。是否有人可以指导我如何使用add函数以及如何使用staticmethod改进该函数

如果参数a和b已经是分数对象,那么您可以直接在方法中使用它们的属性:

@staticmethod
def add(a,b):
    if a.num2 == b.num2 and (a.num1 < a.num2 or b.num1 < b.num2):
        return "%s|%s"%(a.num1 + b.num1, a.num2)
    elif a.num2 != b.num2:
        return "%s|%s"%((a.num1 * b.num2) + (a.num2 * b.num1), (a.num2 * b.num2))
@staticmethod
def添加(a、b):
如果a.num2==b.num2和(a.num1

第一个if子句中也缺少括号。

分数中。add
a
b
已经是
分数
对象。为什么要用新值覆盖它们?
@staticmethod
def add(a,b):
    if a.num2 == b.num2 and (a.num1 < a.num2 or b.num1 < b.num2):
        return "%s|%s"%(a.num1 + b.num1, a.num2)
    elif a.num2 != b.num2:
        return "%s|%s"%((a.num1 * b.num2) + (a.num2 * b.num1), (a.num2 * b.num2))