"""定义Fraction类及其构造方法"""
class Fraction:
def __init__(self,top,bottom):
self.num = top
self.den = bottom
"""注意,形式参数列表包含3项。self是一个总是是指向对象本身的特殊参数,它必须是第一个形式参数
。然而,在调用方法时,从来不需要提供相应的实际参数。如前所述,分数需要分子与分母两部分状态数据。
构造方法中self.num定义了Fraction对象有一个叫做num的内部数据对象作为状态的一部分。同理,self.den定义了
分母。这两个实际参数的值在初赋给了状态,使得新创建的Fraction对象能够知道其初始值 """
#######要创建Fraction的实例,必须调用构造方法。使用类名并且传入状态的实际值就能完成调用
# myfraction = Fraction(3,5)
# print(myfraction)
# <__main__.Fraction object at 0x0000018007D2C908>
# Fraction对象myfraction并不知道如何响应打印请求print()函数唯一能做的就是显示存储变量中的实际引用(地址本身)
# 有两种方法可以解决这一问题。一种是定义一个show方法,使得Fraction对象能够将自己作为字符串来打印。
def show(self):
print(self.num,'/',self.den)
# myfraction = Fraction(3,5)
# myfraction.show()
# 3/5
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()
# print('I ate ',myfraction,'of the pizza')
a = myfraction.__str__()
print(a)
b = str(myfraction)
print(b)
f1 = Fraction(1,4)
f2 = Fraction(3,2)
c = f1.__add__(f2)
print(c)
转载:https://blog.csdn.net/weixin_44448068/article/details/102014811
查看评论