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)

  • 相关阅读:
    轻松把你的项目升级到PWA
    聊聊React高阶组件(Higher-Order Components)
    java NIO系列教程2
    java NIO系列教程1
    个人笔记
    onclick时间加return和不加return的区别
    URL编码分析与乱码解决方案
    第九天 1-8 RHEL7软件包管理
    第八天 RHEL7.2 文件权限管理(第一部分)
    第七天 Linux用户管理、RHEL6.5及RHEL7.2 root密码破解、RHEL6.5安装vmware tools
  • 原文地址:https://www.cnblogs.com/HongjianChen/p/9609333.html
Copyright © 2011-2022 走看看