Python实现子类调用父类的初始化实例


Posted in Python onMarch 12, 2020

前言

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()

执行结果如下:

Python实现子类调用父类的初始化实例

这时候就需要在类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()

执行结果如下:

Python实现子类调用父类的初始化实例

方法二:调用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()

执行结果如下:

Python实现子类调用父类的初始化实例

总结

两种方法各有优缺点,但都可以解决问题。

- 方法一简单直观,但面对多继承问题,只能多次调用每个父类的__init__方法

- 方法二不太直观,但可以解决多继承问题,会一次性的执行所有的父类的对应方法

所以实际使用时,按照自己的需要选择一个就行了。

以上这篇Python实现子类调用父类的初始化实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python如何实现远程控制电脑(结合微信)
Dec 21 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
Python中Numpy ndarray的使用详解
May 24 Python
python实现爬取百度图片的方法示例
Jul 06 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
Python selenium爬取微博数据代码实例
May 22 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
python从PDF中提取数据的示例
Oct 30 Python
python中reload重载实例用法
Dec 15 Python
如何用python反转图片,视频
Apr 24 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 #Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 #Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 #Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 #Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 #Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 #Python
Python获取对象属性的几种方式小结
Mar 12 #Python
You might like
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
php DES加密算法实例分析
2019/09/18 PHP
ExtJS的拖拽效果示例
2013/12/09 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Saltstack快速入门简单汇总
2016/03/01 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python识别html主要文本框过程解析
2020/02/18 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
酒店司机岗位职责
2013/12/14 职场文书
爱情寄语大全
2014/04/09 职场文书
体育口号大全
2014/06/18 职场文书
全陪导游词
2015/02/04 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
房屋质量投诉书
2015/07/02 职场文书
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python