zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    view间传值的方法总结
    初学者关于内存的思考(不断加深不断更新中)
    UITableView刷新数据reLoadData
    rsync安装指南
    Makefile完全解析PART5.使用变量
    Makefile完全解析PART10.使用make更新函数库文件
    windows linux 文件同步 cwrsync工具
    Makefile完全解析PART4.书写命令
    Makefile完全解析PART7.使用函数
    RSYNC安装使用详解
  • 原文地址:https://www.cnblogs.com/HongjianChen/p/9609333.html
Copyright © 2011-2022 走看看