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程序来判断文本的语种
Apr 07 Python
Python单链表简单实现代码
Apr 27 Python
Django中间件实现拦截器的方法
Jun 01 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
Django--权限Permissions的例子
Aug 28 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
Python递归函数特点及原理解析
Mar 04 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
php实现paypal 授权登录
2015/05/28 PHP
详解PHP中的Traits
2015/07/29 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
Python是编译运行的验证方法
2015/01/30 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript