"""定义Fraction类及其构造方法"""
class Fraction:
def __init__(self,top,bottom):
self.num = top
self.den = bottom
"""注意,形式参数列表包含3项。self是一个总是是指向对象本身的特殊参数,它必须是第一个形式参数
。然而,在调用方法时,从来不需要提供相应的实际参数。如前所述,分数需要分子与分母两部分状态数据。
构造方法中self.num定义了Fraction对象有一个叫做num的内部数据对象作为状态的一部分。同理,self.den定义了
分母。这两个实际参数的值在初赋给了状态,使得新创建的Fraction对象能够知道其初始值 """
def show(self):
print(self.num,'/',self.den)
def __str__(self):
return str(self.num) + '/' + str(self.den)
def __add__(self, otherfraction):
newnum = self.num * otherfraction.den + self.den * otherfraction.num
newden = self.den * otherfraction.den
b = gcd(newden,newnum)
return Fraction(newnum//b,newden//b)
def gcd(m, n):
"""欧几里得算法
对于整数m和n,如果m能被n整除,则它们的最大公因数就是n,否则就是n和m除以n的余数的最大公因数"""
while m % n != 0:
oldm = m
oldn = n
m = oldn
n = oldm % n
return n
myfraction = Fraction(3,5)
myfraction.show()
a = myfraction.__str__()
print(a)
b = str(myfraction)
print(b)
f1 = Fraction(1,4)
f2 = Fraction(3,2)
c = f1.__add__(f2)
print(c)