当子类继承父类后,需要调用父类的方法和属性时,需要调用父类的初始化函数。
class A(object): def __init__(self): self.nameaa = 'aa' def funca(self): print('function a %s' % self.nameaa) class B(A): def __init__(self): self.namebb = 'bb'
def funcb(self): print('function b %s' % self.namebb) b = B() print(b.namebb) b.funcb() print(b.nameaa) b.funca()
在子类中重写了构造函数,但新的构造函数没有初始化父类,当没有初始化父类的构造函数时,就会报错。
(1)调用超类的构造方法
class A(object): def __init__(self): self.nameaa = 'aa' def funca(self): print('function a %s' % self.nameaa) class B(A): def __init__(self): self.namebb = 'bb' A.__init__(self) #添加 def funcb(self): print('function b %s' % self.namebb) b = B() print(b.namebb) b.funcb() print(b.nameaa) b.funca()
(2)使用super函数
class A(object): def __init__(self): self.nameaa = 'aa' def funca(self): print('function a %s' % self.nameaa) class B(A): def __init__(self): self.namebb = 'bb' super(B,self).__init__() def funcb(self): print('function b %s' % self.namebb) b = B() print(b.namebb) b.funcb() print(b.nameaa) b.funca()
super函数返回一个super对象,解析过程自动查找所有的父类和父类的父类,当前类和对象可以作为super函数的参数使用,调用函数返回的方法是超类的方法。使用super函数如果子类继承多个父类只许一次继承,使用一次super函数即可。
如果没有重写子类的构造函数,是可以直接使用父类的属性和方法的。
class A(object): def __init__(self): self.nameaa = 'aa' def funca(self): print('function a %s' % self.nameaa) class C(A): pass c = C() c.funca() print(c.nameaa)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤