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
<__main__.Rational0 object at 0x000001D1D91A5F60>
>>> r2 = r1.plus(Rational0(7,15)) # 新对象r2
>>> r2
<__main__.Rational0 object at 0x000001D1D91A5F60> # 地址相同
>>> 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
<__main__.Rational0 object at 0x00000239CADF5E80>
>>> r2 = r1.plus(Rational0(7,15))
>>> r2.print()
80/75
>>> r2
<__main__.Rational0 object at 0x00000239CADF5E80>
>>> 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
<__main__.Rational0 object at 0x000001F857C35DD8>
>>> r2 = r1.plus(Rational0(7,15)) # 新对象r2
<__main__.Rational0 object at 0x000001F857C48940> #地址不同
>>>r2.print()
80/75
>>> r2.num
80
>>> r2.den
75
从地址中可以看出Rational0(3, 5)和r1.plus(Rational0(7,15))返回的对象不是同一个,原因在于return Rational0(num, den)。
Python的return self和return一个新的对象区别的更多相关文章
- Java中如何创建一个新的对象的/Creating Objects/
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't ...
- JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象
数组的增删改 1.新增一项可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组 let a = [0, 1, 2] let b = a.concat([3]) console.log ...
- python基础一 ------利用生成器生成一个可迭代对象
#利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态, ...
- python基础===用9种方式生成新的对象
class Point: def __init__(self, x, y): self.x = x self.y = y point1 = Point(1, 2) point2 = eval(&quo ...
- 从一个数组对象中取key 和value组成一个新的对象
const type = [ {key:'TimeWeiDu',value:'时间维度'}, {key:'TranType',value:'交易类型'}, {key:'OrderType',value ...
- JS——数组中push对象,覆盖问题,每次都创建一个新的对象
今天写运动框架时,发现将对象push进数组,后面的值会覆盖前面的值,最后输出的都是最后一次的值.其实这一切都是引用数据类型惹的祸. 如果你也有类似问题,可以继续看下去哦. 下面 ...
- 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 ...
- 用Java实现一个通用并发对象池
这篇文章里我们主要讨论下如何在Java里实现一个对象池.最近几年,Java虚拟机的性能在各方面都得到了极大的提升,因此对大多数对象而言,已经没有必要通过对象池来提高性能了.根本的原因是,创建一个新的对 ...
- WebKit JavaScript Binding添加新DOM对象的三种方式
一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而 ...
随机推荐
- Unity3D学习笔记——NGUI之Localization system
Localization system(国际化系统) 实现的就是用户选择不同的语言,切换我们游戏文字的显示. 一:创建一个CVS文件.可以用Google Docs, Excel等软件工具. 我这里用的 ...
- 可以将化学结构NMR图谱这样导入Word
在化学各个领域中,大家常常会用到ChemDraw化学绘图软件来绘制各种图形,ChemDraw因其出色的功能在全球范围内深受欢迎,但是一些用户朋友对于一些功能还不是很了解,需要通过一些教程来了解如何操作 ...
- 在DLL中动态加载其所依赖的dll
windows下LoadLibrary函数的搜索顺序是先搜索system32等系统环境变量path下注册过的路径,然后是当前路径. 这里的相对路径是指的主exe所在路径,并且相对路径在程序运行过程中可 ...
- PDO drivers no value in Windows
学习php编程遇到 Uncaught exception 'PDOException' with message 'could not find driver' 或者 Undefined class ...
- tomcat开启远程调试
tomcat开启远程调试模式: 需要在启动脚本中的 JAVA_OPTS='-server -Xms1024m -Xmx1024m -Xmn384m -Xss256k -XX:PermSize=128m ...
- 十六进制字符串 char 数组 转换 c/c++/java
转载自:http://qing.blog.sina.com.cn/1820422183/6c81702733001qvk.html 1.c版 int hexcharToInt(char c) { ...
- 安装IntelliJ IDEA 破解安装
IDEA 功能介绍 1-深度智力 IntelliJ IDEA为您的源代码编制索引后,通过在每个环境中提供相关建议,提供快速,智能的体验:即时和智能的代码完成,即时代码分析和可靠的重构工具. 2-开箱即 ...
- Xamarin.Forms学习之Platform-specific API和文件操作
这篇文章的分享原由是由于上篇关于Properties的保存不了,调用SavePropertiesAsync()方法也不行,所以我希望通过操作文件的方式保存我的需要的数据,然后我看了一下电子书中的第二十 ...
- jPage.js分页
jPage.js插件使用文档 这一款插件主要是为了bootstrap原生的分页功能效果不理想而诞生的一款插件. jPage.js代码更新地址为:https://github.com/leslieSie ...
- PHP定界符{}的作用
说明: PHP解析一个字符串为"Hello,$World"时会自动解析$World. {}是方便让PHP更快的查找,它告诉PHP这里面就是变量,不用再判断是否是变量了. 例子: $ ...