python中return返回一个对象_Python的return self和return一个新的对象区别

目的:设计一个有理数相加。如3/5 + 7/15 = 80/75

return self

输入:

class Rational0:

def __init__(self, num, den=1):

self.num = num

self.den = den

def plus(self, another):

den = self.den * another.den

num = (self.num * another.den + self.den * another.num)

return self

def print(self):

print(str(self.num) + "/" + str(self.den))

输出:

>>> r1 = Rational0(3, 5)

>>> r1.print()

3/5

>>> r1

>>> r2 = r1.plus(Rational0(7,15)) # 新对象r2

>>> r2

<__main__.rational0 object at> # 地址相同

>>> r1.plus(Rational0(7,15)).print() #或者r2.print()

3/5

>>> r2.num

3

>>> r2.den

5

从地址中可以看出Rational0(3, 5)和r1.plus(Rational0(7,15))返回的对象是同一个r1地址,原因在于return self。

return self做出修改

class Rational0:

def __init__(self, num, den=1):

self.num = num

self.den = den

def plus(self, another):

den = self.den * another.den

num = (self.num * another.den + self.den * another.num)

self.den = den

self.num = num

return self

#return Rational0(num, den)

def print(self):

print(str(self.num) + "/" + str(self.den))

r1 = Rational0(3, 5)

r2 = r1.plus(Rational0(7,15))

r2.print()

输出:

>>> r1 = Rational0(3, 5)

>>> r1.print()

3/5

>>> r1

>>> r2 = r1.plus(Rational0(7,15))

>>> r2.print()

80/75

>>> r2

>>> r2.num

80

>>> r2.den

75

分析:

return新的对象

输入:

class Rational0:

def __init__(self, num, den=1):

self.num = num

self.den = den

def plus(self, another):

den = self.den * another.den

num = (self.num * another.den + self.den * another.num)

return Rational0(num, den)

def print(self):

print(str(self.num) + "/" + str(self.den))

输出:

>>> r1 = Rational0(3, 5)

>>> r1.print()

3/5

>>> r1

>>> r2 = r1.plus(Rational0(7,15)) # 新对象r2

<__main__.rational0 object at> #地址不同

>>>r2.print()

80/75

>>> r2.num

80

>>> r2.den

75

从地址中可以看出Rational0(3, 5)和r1.plus(Rational0(7,15))返回的对象不是同一个,原因在于return Rational0(num, den)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值