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

return self

输入:

  1. class Rational0:
  2. def __init__(self, num, den=1):
  3. self.num = num
  4. self.den = den
  5. def plus(self, another):
  6. den = self.den * another.den
  7. num = (self.num * another.den + self.den * another.num)
  8. return self
  9. def print(self):
  10. print(str(self.num) + "/" + str(self.den))

输出:

  1. >>> r1 = Rational0(3, 5)
  2. >>> r1.print()
  3. 3/5
  4. >>> r1
  5. <__main__.Rational0 object at 0x000001D1D91A5F60>
  6. >>> r2 = r1.plus(Rational0(7,15)) # 新对象r2
  7. >>> r2
  8. <__main__.Rational0 object at 0x000001D1D91A5F60> # 地址相同
  9. >>> r1.plus(Rational0(7,15)).print() #或者r2.print()
  10. 3/5
  11. >>> r2.num
  12. 3
  13. >>> r2.den
  14. 5

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

return self做出修改

  1. class Rational0:
  2. def __init__(self, num, den=1):
  3. self.num = num
  4. self.den = den
  5. def plus(self, another):
  6. den = self.den * another.den
  7. num = (self.num * another.den + self.den * another.num)
  8. self.den = den
  9. self.num = num
  10. return self
  11. #return Rational0(num, den)
  12. def print(self):
  13. print(str(self.num) + "/" + str(self.den))
  14. r1 = Rational0(3, 5)
  15. r2 = r1.plus(Rational0(7,15))
  16. r2.print()

输出:

  1. >>> r1 = Rational0(3, 5)
  2. >>> r1.print()
  3. 3/5
  4. >>> r1
  5. <__main__.Rational0 object at 0x00000239CADF5E80>
  6. >>> r2 = r1.plus(Rational0(7,15))
  7. >>> r2.print()
  8. 80/75
  9. >>> r2
  10. <__main__.Rational0 object at 0x00000239CADF5E80>
  11. >>> r2.num
  12. 80
  13. >>> r2.den
  14. 75

分析:





return新的对象

输入:

  1. class Rational0:
  2. def __init__(self, num, den=1):
  3. self.num = num
  4. self.den = den
  5. def plus(self, another):
  6. den = self.den * another.den
  7. num = (self.num * another.den + self.den * another.num)
  8. return Rational0(num, den)
  9. def print(self):
  10. print(str(self.num) + "/" + str(self.den))

输出:

  1. >>> r1 = Rational0(3, 5)
  2. >>> r1.print()
  3. 3/5
  4. >>> r1
  5. <__main__.Rational0 object at 0x000001F857C35DD8>
  6. >>> r2 = r1.plus(Rational0(7,15)) # 新对象r2
  7. <__main__.Rational0 object at 0x000001F857C48940> #地址不同
  8. >>>r2.print()
  9. 80/75
  10. >>> r2.num
  11. 80
  12. >>> r2.den
  13. 75

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

Python的return self和return一个新的对象区别的更多相关文章

  1. Java中如何创建一个新的对象的/Creating Objects/

    The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't ...

  2. JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象

    数组的增删改 1.新增一项可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组 let a = [0, 1, 2] let b = a.concat([3]) console.log ...

  3. python基础一 ------利用生成器生成一个可迭代对象

    #利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态, ...

  4. python基础===用9种方式生成新的对象

    class Point: def __init__(self, x, y): self.x = x self.y = y point1 = Point(1, 2) point2 = eval(&quo ...

  5. 从一个数组对象中取key 和value组成一个新的对象

    const type = [ {key:'TimeWeiDu',value:'时间维度'}, {key:'TranType',value:'交易类型'}, {key:'OrderType',value ...

  6. JS——数组中push对象,覆盖问题,每次都创建一个新的对象

    今天写运动框架时,发现将对象push进数组,后面的值会覆盖前面的值,最后输出的都是最后一次的值.其实这一切都是引用数据类型惹的祸.       如果你也有类似问题,可以继续看下去哦.       下面 ...

  7. sorted函数返回一个新的列表就安全了吗?

    arr=[[1,2,3],[4,2,3],[5,2,3]] x2=sorted(arr) print 'sorted',x2 print '-'*20 for ar in arr: ar.append ...

  8. 用Java实现一个通用并发对象池

    这篇文章里我们主要讨论下如何在Java里实现一个对象池.最近几年,Java虚拟机的性能在各方面都得到了极大的提升,因此对大多数对象而言,已经没有必要通过对象池来提高性能了.根本的原因是,创建一个新的对 ...

  9. WebKit JavaScript Binding添加新DOM对象的三种方式

    一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而 ...

随机推荐

  1. CentOS 6.5 安装Gitlab 7.12.2

    官网环境要求 参见:https://github.com/gitlabhq/gitlabhq GitLab is a Ruby on Rails application that runs on th ...

  2. SlidingMenu——使用前的配置

    一: 首先下载lib:SlidingMenu.然后将起导入eclipse中,然后将其clean一下,重新生成R文件. 二: 因为SlidingMenu依赖ActionBarSherlock,所以需要下 ...

  3. ios - 视图 渐变

    // // YViewGradient.m // AoleYou20170907 // // Created by XY IOS on 2018/4/25. // Copyright © 2018年 ...

  4. linux命令小结

    查看IP  ip a 测试ip   ping 10.0.0.128 测试端口   telnet 10.0.0.128  22  # telnet + ip + 端口 Linux - CentOS 7. ...

  5. Python:简述 线程、进程和协程

    Python线程 定义:Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  6. Android开发:fragment将事件传递回activity

    fragment触发事件后传递会给activity,可以通过在fragment中定义一个接口,让activity实现这个接口. 具体代码如下 public class AAFragment exten ...

  7. Android自定义Button字体颜色和背景颜色

    http://blog.csdn.net/breeze666/article/details/7747649

  8. Java的版本历史与特性

    一个比较流行的问题是,“Java下一个版本会有什么特性呢?” .这是否是个好问题却有待商榷.在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在 ...

  9. 【BZOJ3083/3306】遥远的国度/树 树链剖分+线段树

    [BZOJ3083]遥远的国度 Description 描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了 ...

  10. jQuery改变CSS使DIV显示

    HTML: <div id="mazey" style="display:none;">www.mazey.net</div> jQue ...