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下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
你真的了解Python的random模块吗?
Dec 12 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
python numpy 显示图像阵列的实例
Jul 02 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
在python shell中运行python文件的实现
Dec 21 Python
python3 使用traceback定位异常实例
Mar 09 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
Matplotlib绘制混淆矩阵的实现
May 27 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP生成静态页面详解
2006/11/19 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
php之curl设置超时实例
2014/11/03 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
python安装scipy的方法步骤
2019/06/26 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
解决python运行效率不高的问题
2020/07/20 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
Go 自定义package包设置与导入操作
2021/05/06 Golang
pandas进行数据输入和输出的方法详解
2022/03/23 Python