python super().__init__的用法
载自 :(85条消息) python super().__init__的用法详解_一条水里的鱼的博客-CSDN博客_super.__init__
用于学习记录
一、前言
super(father).__init__()
目的:调用父类的__init__()函数进行初始化
二、应用场景:
class A(): def __init__(self): self.a=100 self.b='xxx' self.c=True def func1(self): pass
如上,有类A,现在想创建类B继承类A,但是类B的self.c需要改为False,super(子类,self).__init__() 可以发挥作用了
class B(A): def __init__(self): super(B,self).__init__() self.c=True def func2(self): print(self.b) print(self.c) b=B() b.func2() 输出: xxx True
问题:super调用父类的init方法进行初始化,那当父类的init方法中有调用方法时,则这时候是调用父类的还是调用子类的呢(当然前提是子类有重写父类的方法)?
三、进阶理解
class A(): def __init__(self,a,b): self.a=a self.b=b print(self.b) self.prints() def prints(self): print('self.A:',self.a) class Zilei(A): def __init__(self,a): super(Zilei, self).__init__(a,a+1) self.a = a+100 print('self.a:', self.a) def prints(self): print('self.b:',self.b) ass=Zilei(1) # 1/ 先执行super(Zilei, self).__init__(a,a+1),即执行A.__init__ # 所以输出print(self.b),即2 # 再执行self.prints() ,值得注意的是A.prints(),在子类zilei被重写,所以应该执行的是zilei.prints(),即输出:self.b:2 #2/返回到zilei.__init__执行print('self.a:', self.a) 输出 self.a:101 # 最终输出的结果: # 2 # self.b:2 # self.a:101
看完上述分析,答案很明显是:调用子类重写后的方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix