继承和super的问题
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) 这段代码不太懂,请大佬指点^_^ return super(ClassTest,self).__new__(self) 可以理解为调用父类的 __new__ 方法,把 self 当做参数传递进去 本帖最后由 zym297140058 于 2020-4-10 14:13 编辑
{:5_94:} zltzlt 发表于 2020-4-10 13:01
return super(ClassTest,self).__new__(self) 可以理解为调用父类的 __new__ 方法,把 self 当做参数传递进 ...
那a = Student()时候,在student类里面__num加过1,然后再调用父类的__new__方法的话__num不是还会+1吗
return super(ClassTest,self).__new__(self)是去调用父类的__new__方法
如果直接是return self.__new__(self)
就会进入死循环,因为子类new方法调用了自身的new方法 _荟桐_ 发表于 2020-4-11 07:38
return super(ClassTest,self).__new__(self)是去调用父类的__new__方法
如果直接是return self.__new__ ...
那调用父类的new之后父类的return super(ClassTest,self).__new__(self)不会再使用了吗 zym297140058 发表于 2020-4-11 10:06
那调用父类的new之后父类的return super(ClassTest,self).__new__(self)不会再使用了吗
父类没有return super(ClassTest,self).__new__(self)语句
就像函数一样,如果你在函数里调用函数本身(就是只要执行了这个函数就会再调用函数本身的函数)
结果就是一直调用函数本身,死循环
例如:
def fun():
return fun()
就会一直调用fun(),出不去
类也一样
页:
[1]