Python中super()的用法
参考:https://blog.csdn.net/a__int__/article/details/104600972
Python里的super().__init__()有什么作用。
直白的说super().__init__(),就是继承父类的init方法,同样可以使用super()+. 其他方法名,去继承其他方法
示例对比
先写一个父类,父类定义了一个__init__方法
1 2 3 | class Person( object ): def __init__( self , name = 'Person' ): self .name = name |
在写三个继承自该父类的子类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 直接继承 class Puple(Person): pass # 重写init方法 class Puple_Init(Person): def __init__( self , age): self .age = age # 重写init方法但是继承了父类的init方法 class Puple_Super(Person): def __init__( self , name, age): # self.name = name self .age = age super ().__init__(name) |
第一个子类Puple直接继承
第二个子类Puple_Init继承并写了init方法
第三个子类Puple_Super继承并写了init方法,还添加了super().__init__()
分别创建三个类的对象
1 2 3 | pp = Puple() pp_i = Puple_Init( 10 ) pp_s = Puple_Super( 'Puple_Super' , 12 ) |
运行结果对比
第一个对象可以接调用父类的name属性
1 2 | print (pp.name) # Person |
第二个对象pp_i继承自父类,覆盖初始化def init增加属性age,不能调用name属性
1 2 | # print(pp_i.name) # AttributeError: 'Puple_Init' object has no attribute 'name' |
第三个对象pp_s继承自父类,覆盖初始化init,增加了定义属性age,同时继承了父类的init,即相当于在init方法里也包含self.name = name 所以可以调用name属性
1 2 | print (pp_s.name) # Puple_Super |
注意:使用super继承父类的方法需要按照父类定义的函数格式去传递参数,但是不需要传递self,以本例子为例
1 2 3 4 5 6 7 8 | # 类Puple_Super的父类为Person # 使用以下方法继承父类的初始化__init__方法 super ().__init__(name) # 在父类该初始化方法定义为 def __init__( self , name = 'Person' ): self .name = name # 所以需要在继承的时候传递对应的参数name,本次不传递也不会报错 # 因为在父类设置了默认值Person,如果在父类没有设置默认值则在继承的时候一定要加对应的参数name |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2020-07-13 Rabbitmq修改主机名后配置
2017-07-13 docker容器技术
2017-07-13 Oracle之RMAN备份恢复1-基础篇
2017-07-13 Centos清除IP