前言
python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错。
例如以下的代码:
class A(object): def __init__(self): self.a = 5 def function_a(self): print('I am from A, my value is %d' % self.a) class B(A): def __init__(self): self.b = 10 def function_b(self): print('I am from B, my value is %d' % self.b) self.function_a() # 调用类A的方法,出错 if __name__ == '__main__': b = B() b.function_b()
执行结果如下:
这时候就需要在类B的__init__方法中先执行类A的__init__方法,脚本才可以正确执行。Python提供了两种方法来完成这个任务。
方法一: 调用未绑定的父类__init__方法
在类的方法定义时,首个参数均为self。当实例化这个类时,self就被自动绑定到当前的实例。绑定也就意味着这个实例的属性,方法都可以通过‘self.***的方式进行调用。但是如果通过类名直接调用类的方法,self参数就不会被自动绑定到实例上,可以绑定到我们指定的实例上。也就是子类的实例上,在这里就是类B了。
所以这里所说的未绑定的父类__init__方法 就是指未绑定父类实例的父类__init__方法。
具体的代码如下:
class A(object): def __init__(self): self.a = 5 def function_a(self): print('I am from A, my value is %d' % self.a) class B(A): def __init__(self): A.__init__(self) # 此处修改了。如果类A的__init__方法需要传参,也需要传入对应的参数 self.b = 10 def function_b(self): print('I am from B, my value is %d' % self.b) self.function_a() if __name__ == '__main__': b = B() b.function_b()
执行结果如下:
方法二:调用super函数
super函数是用于调用父类的一个方法,主要是用于解决多继承问题,避免多继承带来的一些问题,当然也可以用来解决单继承问题,调用父类的__init__方法了。
具体代码如下:
class A(object): def __init__(self): self.a = 5 def function_a(self): print('I am from A, my value is %d' % self.a) class B(A): def __init__(self): super(B, self).__init__() # 此处修改了 self.b = 10 def function_b(self): print('I am from B, my value is %d' % self.b) self.function_a() if __name__ == '__main__': b = B() b.function_b()
执行结果如下:
总结
两种方法各有优缺点,但都可以解决问题。
- 方法一简单直观,但面对多继承问题,只能多次调用每个父类的__init__方法
- 方法二不太直观,但可以解决多继承问题,会一次性的执行所有的父类的对应方法
所以实际使用时,按照自己的需要选择一个就行了。
以上这篇Python实现子类调用父类的初始化实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
金钱帮资源网 Copyright www.kbjia.com
暂无“Python实现子类调用父类的初始化实例”评论...
更新日志
2024年10月09日
2024年10月09日
- 【原神】V5.0攻略 | 林尼攻略一图流
- 李翊君.1993-相思的烈酒【上华】【WAV+CUE】
- 古巨基.1998-LEO.KU(国)【千禧年代】【WAV+CUE】
- 郭子.2001-原来你什么都不想要创作集丫滚石】【WAV+CUE】
- 《使命召唤:黑色行动6》新预告公布!10月25日发售
- Atlus《暗喻幻想》媒体评分汇总:高分好评如潮!
- 2024金摇杆奖提名揭晓 《黑神话》角逐最佳视觉设计!
- 群星《新说唱2024 第3期 (上)》[320K/MP3][32.76MB]
- 群星《新说唱2024 第3期 (上)》[FLAC/分轨][95.38MB]
- 群星《新说唱2024 第3期 (下)》[320K/MP3][31.36MB]
- 幻兽帕鲁手游什么时候正式上线 最新消息一览
- 西普大陆BOSS位置盘点 解锁天启纪元玩法
- 西普大陆精灵进阶培养攻略 精灵养成指南
- dnf手游法控法系职业哪个强 dnf手游法控法系职业强度排行
- 魔兽世界血藤护目镜图纸在哪买 wlk血藤护目镜图纸购买位置介绍