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)

  • 相关阅读:
    MT9v024总结
    常用芯片电路知识汇总
    octopress 如何添加youku视频和本地视频(octopress how to add a youku video or a local video)
    MT9M021/MT9M031总结
    TC358746AXBG/748XBG 桥接器说明
    mipi 调试经验
    1‘b0 什么意思
    MIPI总结和MIPI规格说明书
    octopress添加回到顶部按钮
    CentOS软件安装目录查找
  • 原文地址:https://www.cnblogs.com/HongjianChen/p/9609333.html
Copyright © 2011-2022 走看看