鱼C论坛

 找回密码
 立即注册
查看: 590|回复: 2

[已解决]关于递归的问题

[复制链接]
发表于 2020-4-26 09:41:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class Nstr:
    def __init__(self, arg=''):
        if isinstance(arg, str):
            self.total = 0
            for each in arg:
                self.total += ord(each)
        else:
            print("参数错误!")

    def __add__(self, other):
        return self.total + other.total                 
                                                  
                                                                  
   这样写为什么不会递归
而象 def __add__(self,other)
        return self +other  会递归
最佳答案
2020-4-26 09:57:23
本帖最后由 sunrise085 于 2020-4-26 10:08 编辑

def __add__(self,other)是对加号"+"的重载。
当遇到两个Nstr类的对象执行+操作的时候,会自动调用__add__函数。
第一种写法,调用到该重载函数的时候,执行的操作是self.total + other.total,是对该类的成员变量total相加,total应该是字符串转化的整型。int本身就可以直接相加,因为类有__add__函数。
第二种写法,调用到该重载函数的时候,执行的操作是self+other,仍然是该类的两个对象的相加,会再次调用该重载函数,以至于递归调用,陷入死循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-26 09:57:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-4-26 10:08 编辑

def __add__(self,other)是对加号"+"的重载。
当遇到两个Nstr类的对象执行+操作的时候,会自动调用__add__函数。
第一种写法,调用到该重载函数的时候,执行的操作是self.total + other.total,是对该类的成员变量total相加,total应该是字符串转化的整型。int本身就可以直接相加,因为类有__add__函数。
第二种写法,调用到该重载函数的时候,执行的操作是self+other,仍然是该类的两个对象的相加,会再次调用该重载函数,以至于递归调用,陷入死循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 10:15:57 | 显示全部楼层
本帖最后由 sunrise085 于 2020-4-26 10:17 编辑

你的这个问题和另外一个减法帖子中的类不一样啊。
这个类没有继承str类。
继承和没有继承差别很大的。
若是继承了str,该类的对象就是字符串,没有继承,该类对象就仅仅是该类的对象了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表