python子类继承父类属性实例_Python实现子类调用父类的初始化实例

前言

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

执行结果如下:

20200312101055.jpg

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

执行结果如下:

20200312101104.jpg

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

执行结果如下:

20200312101119.jpg

总结

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hadoop 回收站Trash

介绍: Hadoop回收站trash,默认是关闭的。 和Linux系统的回收站设计一样,HDFS会为每一个用户创建一个回收站目录:/user/用户名/.Trash/,每一个被用户通过Shell删除的文件/目录,在系统回收站中都一个周期&…

opencv画框返回坐标 python_[python]依靠pynput和pyautogui替换ahk

autohotkey当然是不错的工具,但是这个东西的社群一直发展的不行。从开始学习python以后,我就不时会希望能找到别的工具替代ahk。Python的众多包里面确实是有对应的工具的:模拟鼠标和键盘的操作可以用pyautogui,而捕捉热键则可以使…

Hadoop SequenceFile

apache原文:http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html 概念: SequenceFile是一个由二进制序列化过的key/value的字节流组成的文本存储文件,它可以在map/reduce过程中的input/output 的format时被使…

机器学习算法平台alink_Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

Alink漫谈(十二) :在线学习算法FTRL 之 整体设计[Toc]0x00 摘要Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台,是业界首个同时支持批式算法、流式算法的机器学习平台。本文和下文将介绍在线学习算法FTRL在Alink中是如何实现的&a…

Linux Shell获取系统资源使用百分比(CentOS)

CPU使用率: top -b -n 1 | head -n 4 | grep "^Cpu(s)" | awk {print $2} | cut -d u -f 1 内存使用率: free -m | grep ^- | awk {print $3/($3$4)*100"%"} IO使用率(FS_PATH的值改成df -h出来的那些Filesystem名称即可…

html城市绘制,HTML5/Canvas二分法构建城市版图

JavaScript语言:JaveScriptBabelCoffeeScript确定var ctx fullscreenCanvas().ctx;var canvas ctx.canvas;function Rect(pos, width, height) {this.pos pos;this.width width;this.height height;}Rect.prototype.update Function.prototype;Rect.prototype…

探测器反向偏压_近红外和可见光双模有机光电探测器

更多精彩,点击上方蓝字关注我们!中英标题近红外和可见光双模有机光电探测器Near-infrared and Visible Light Dual-mode Organic Photodetectors图文导读研究报告了一种具有三层可见光吸收体/光学间隔层/近红外(NIR)光吸收体结构的双模有机光电探测器(OP…

html里post请求404,请求登陆页面post请求404错误,OPTIONS请求通过

点击登录的时候option请求是通过的,但post请求失败。服务端代码app.js:const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 创建 express 应用c…

python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校

【摘要】当今世界充满了各种数据,而python是其中一种的重要组成部分。然而,若想其有所应用,我们需要对这些python理论进行实践。其中包含很多有趣的的过程,然后将其用于某些方面。其中一种应用就是python项目实例。今天环球网校的…

PWA即将推向所有Chrome平台

\看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!\\\大多数人应该都听说了微软已经着手在Windows商店中增加PWA,这是一个重磅消息!\\\\渐进增强式Web应用…

c++代码转为go_Go语言学习笔记六--string编码

分解探索string编码转为byte数组func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 为什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 转为16进制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

Linux机器件拷贝文件

常用命令有:sftp,scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戏时长计算机,我加入steam五年了,盘点下我买过的22款正版单机游戏

我加入steam五年了,盘点下我买过的22款正版单机游戏2020-02-17 10:50:07104点赞72收藏37评论大家好吖,在2015年的时候朋友就推荐了我入坑steam,不过那个时候更多的知道这是个dota启动器,慢慢的steam也越来越出名啦,中国…

AdPlayBanner:功能丰富、一键式使用的图片轮播插件

概述 AdPlayBanner:功能丰富、一键式使用的图片轮播插件详细 代码下载:http://www.demodashi.com/demo/11312.html AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresco、…

pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

点击上方“AI派”,关注公众号,选择加“星标“或“置顶”导读只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型。你知道吗,在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法?此外&…

引入静态变量_Common Lisp变量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常简单:只是用一个名字空间,所有表达式中相应位置的值应该是明确的。Common Lisp和Scheme最大的不同是,函数名字空间和数据的名字空间是分离的。操作函数名字空间的语句包括,defun&#xff…

JobTracker和TaskTracker

转载:http://blog.csdn.net/keda8997110/article/details/8348705 ----------------------------------------------------------------------------------------- JobTracker和TaskTracker JobTracker 对应于 NameNode TaskTracker 对应于 DataNode DataNode 和Na…

c理c利用计算机怎么弹,通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的...

通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的计算机的工作方式:现代计算机的基本体系结构都是采用冯诺依曼结构,冯诺依曼的设计思想最重要之处是"存储程序"的这个概念。计算机的工作过程,就是执行程序的…

Linux安装MySQL的两种方法

原文链接:http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 运行平台:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安装…

jenkins 手动执行_想知道如何用Jenkins自动执行Python脚本输出测试报告?

前言在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins,我们可以结合 Git/SVN 自动拉取代码,可以设置定时构建,接着就可…