鱼C论坛

 找回密码
 立即注册
查看: 242|回复: 6

继承和super的问题

[复制链接]
发表于 2020-4-10 12:59:06 | 显示全部楼层 |阅读模式

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

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

x
class ClassTest(object):
    __num = 0
    @classmethod
    def addNum(self):
        self.__num += 1
    @classmethod
    def getNum(self):
        return self.__num
     
    def __new__(self):
        ClassTest.addNum()
        return super(ClassTest,self).__new__(self)
     
class Student(ClassTest):
    def __init__(self):
        self.name = ''
           

a = Student()
b = Student()
ClassTest.getNum()

运行结果:
2


这个是网上看到一个例子,想一下关于继承的问题,Student继承了ClassTest,我弄不明白这个具体是怎么运行的,最主要是 return super(ClassTest,self).__new__(self) 这段代码不太懂,请大佬指点^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 13:01:48 | 显示全部楼层
return super(ClassTest,self).__new__(self) 可以理解为调用父类的 __new__ 方法,把 self 当做参数传递进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-10 14:11:59 | 显示全部楼层
本帖最后由 zym297140058 于 2020-4-10 14:13 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-10 14:12:46 | 显示全部楼层
zltzlt 发表于 2020-4-10 13:01
return super(ClassTest,self).__new__(self) 可以理解为调用父类的 __new__ 方法,把 self 当做参数传递进 ...

那a = Student()时候,在student类里面__num加过1,然后再调用父类的__new__方法的话__num不是还会+1吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 07:38:24 From FishC Mobile | 显示全部楼层
return super(ClassTest,self).__new__(self)是去调用父类的__new__方法
如果直接是return self.__new__(self)
就会进入死循环,因为子类new方法调用了自身的new方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-11 10:06:44 | 显示全部楼层
_荟桐_ 发表于 2020-4-11 07:38
return super(ClassTest,self).__new__(self)是去调用父类的__new__方法
如果直接是return self.__new__ ...


那调用父类的new之后父类的return super(ClassTest,self).__new__(self)不会再使用了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 11:41:37 From FishC Mobile | 显示全部楼层
zym297140058 发表于 2020-4-11 10:06
那调用父类的new之后父类的return super(ClassTest,self).__new__(self)不会再使用了吗

父类没有return super(ClassTest,self).__new__(self)语句
就像函数一样,如果你在函数里调用函数本身(就是只要执行了这个函数就会再调用函数本身的函数)
结果就是一直调用函数本身,死循环
例如:
def fun():
    return fun()
就会一直调用fun(),出不去
类也一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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