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中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python算法之栈(stack)的实现
Aug 18 Python
利用python批量检查网站的可用性
Sep 09 Python
Python中动态创建类实例的方法
Mar 24 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
python numpy数组中的复制知识解析
Feb 03 Python
python3处理word文档实例分析
Dec 01 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
Python基础之函数嵌套知识总结
May 23 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
最省空间的计数器
2006/10/09 PHP
php中session使用示例
2014/03/29 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
django的model操作汇整详解
2019/07/26 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
关于Java String的一道面试题
2013/09/29 面试题
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
运动会演讲稿50字
2014/08/25 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
保护动物的宣传语
2015/07/13 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
python中取整数的几种方法
2021/11/07 Python