洗礼灵魂,修炼python(34)--面向对象编程(4)—继承

NDIAurora 6D、5D传感器裸线焊接与烧录 6D传感器型号:10001742;5D传感器型号:610157 NDI Aurora 6D、5D传感器裸线焊接与烧录 阅读详情

前面已经说到面向对象编程有封装,继承,多态三大特性,那么其中的继承则很重要,可以直接单独的拿出来解析

继承

1.什么是继承:

字面意是子女继承父母的家产或者特性等。而在编程里继承是指子类继承父类(基类,超类,都一个意思)的属性和方法

2.怎么继承:

说个简单的例子,在前面里说到了定义类时使用object参数后就带有了object的属性和方法,这种自然带有的属性和方法就是继承。

所以,继承的方法:在事先有父类的前提下,定义子类时,把父类类对象以参数形式传入就行

例子:

3.实际案列:

 

定义一个继承人类为基类的子类的中国人:(注意看代码,因为本篇博文大部分知识点都是由这个例子展开)

class Human:
    def __init__(self,name,sex,age,skin_color,hair_color,language):
        self.head=1
        self.hands=2
        self.legs=2
        self.name=name
        self.sex=sex
        self.age=age
        self.skin_color=skin_color
        self.hair_color=hair_color
        self.language=language
    def walk(self):
        print ('白天出去逛街')
    def sleep(self):
        print('晚上回家睡觉')

        
class chinaman(Human):
    def old_Invention(self):
        print('中国人发明了火药,造纸术,指南针,印刷术')
    def new_Invention(self):
        print('中国人发明了高铁,支付宝,共享单车,网购')

        
yang=chinaman('yang','男','21','黄皮肤','黑头发','中国话')

结果:

 

这个例子就很好的体现了继承,中国人继承了人类,中国人不仅继承了人类的属性和方法,还有自己独有的方法

 不过,细心的朋友应该发现了,我在定义子类时并没有使用构造器初始化,那么我初始化看看呢?

代码其他不变,在子类加入构造器初始化:

发现了没?好像在子类继承父类后再初始化实例属性时把父类的初始化下的实例属性全部覆盖掉了。所以你终于知道我刚才为什么不初始化了吧?那么父类是不是也被改变了呢?实例化一个父类对象看看:

 

 

所以可以得出:

  • 当子类添加属性后,调用子类时,继承父类,但有自己的属性或方法
  • 当子类重写的属性和父类相同,子类覆盖父类属性为子类的新属性,但父类不受影响

 

不过这个问题还是得解决啊,因为在实际的开发中,总会在继承父类后又初始化新的属性的,比如我在原来的父类基础上想加入头发颜色参数,有没有办法解决呢?答案是肯定有的,而且有两个办法:

方法1:调用未绑定的父类方法:父类名.__init__(self)

给子类在父类基础上加头发颜色参数:

发现报错了,提示需要给name等父类参数赋值定义:

一起加入又提示参数给多了,分开加入,子类在前,把父类参数作为一个元组(这样就是两个参数了)加入提示还是给多了参数。

 

所以这里体现出一个问题,在子类继承父类时,父类的参数在子类实例化时必须全部赋值定义,如果有子类参数也一并赋值定义

 大概看懂了吧?

 

那么我们要在子类添加头发颜色的话,正确的方法是这样:

class Human:
    def __init__(self,name,sex,age,skin_color,hair_color,language): #父类的参数
        #为父类参数赋值定义
        self.head=1
        self.hands=2
        self.legs=2
        self.name=name
        self.sex=sex
        self.age=age
        self.skin_color=skin_color
        self.language=language
        self.hair_color=hair_color
        
    def walk(self):
        print ('白天出去逛街')
    def sleep(self):
        print('晚上回家睡觉')

        
class chinaman(Human):
    def __init__(self,name,sex,age,skin_color,hair_color,language,eye_color): #子类和父类全部参数赋值定义
        Human.__init__(self,name,sex,age,skin_color,hair_color,language)  #表示继承父类的参数

        self.eye_color=eye_color #不继承父类的参数,即子类参数
    def old_Invention(self):
        print('中国人发明了火药,造纸术,指南针,印刷术')
    def new_Invention(self):
        print('中国人发明了高铁,支付宝,共享单车,网购')

yang=chinaman('yang','男','21','黄皮肤','黑头发','中国话','黑眼睛')  

 

 

结果:

 

 

方法2:使用super高阶函数:super([子类名,self]).__self(父类对象参数)

 super函数和方法一的功效是一样的,只不过写法有一点点不同而已

 

 

注意使用super函数时,不用传进self(不然报错),也不用写入父类名,会自动查找

 

也可以这样写:

 

所以,和是一样的。

但是两种写法都不能加self,这点很重要,必须记住

 

是不是我给的参数太多没看懂是吧?

看个简单点的:

class A(object):
    def __init__(self, name,test):
        self.name=name
        self.test=test
        print ("name:", self.name)
        print ('test:',self.test)
    def getName(self):
        return 'A ' + self.name
 
class B(A):
    def __init__(self, name,test,age): #这里写下父类子类所有的参数
        A.__init__(self,name,test)  #把父类的参数单独拿出来表示
        print ("hi")
        self.name = name  #父类参数赋值定义
        self.test=test  #父类参数赋值定义
        self.age=age  #子类参数赋值定义
    def getName(self):
        return 'B '+self.name
 
if __name__=='__main__':
    b=B('hello','test','age')
    print (b.getName())

结果:

 

然后这个例子里如果使用super函数,怎么写你就自己下去研究了,前面复杂的你都会了,相信这个稍微简单的你肯定会,留为课后作业自己练习下吧

 

好的,关于继承,具体的还是要你自己下去琢磨或者研究

 

c++对halcon的动态链接库dll封装及调用(细细讲) 本文详细介绍了将Halcon图像处理算法封装为C++动态链接库(DLL)的完整流程,包括7个关键步骤:1)封装Halcon函数并导出CPP文件;2)在C++项目中配置Halcon环境(包含目录、库目录设置);3)验证Halcon代码;4)创建DLL项目并进行环境配置;5)编辑DLL并导出生成文件(.dll、.lib、.h);6)在主项目中配置DLL调用环境;7)编写测试代码验证功能。通过这个流程实现了Halcon算法的模块化封装和复用,文中提供了具体的配置路径和代码示例,重点说明了环境配置细节和文件结构安排 阅读详情

相关推荐

【学习体会】Lighttools8.4.0:设置虚拟相机+仿真结果3D显示

1.设置虚拟相机并渲染视图中的图像 添加球型光源、接收器、cube物体,设置物体表面的光学属性为简单散射

LeonJin的博客 6282

微服务:SpringCloud(1)

学习目标 1、了解系统架构的演变 2、了解RPC与Http的区别 3、掌握HttpClient的简单使用 4、知道什么是SpringCloud 5、独立搭建Eureka注册中心 6、独立配置Robbin负载均衡 一、系统架构的演变 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务...

魔法革1996 661

从零开始搭建Proxmox VE虚拟化网络:手把手教你配置桥接、VLAN和链路聚合

本文详细介绍了如何在Proxmox VE虚拟化环境中配置桥接、VLAN和链路聚合网络。通过分步指南和实战案例,帮助用户掌握Linux Bridge、VLAN隔离和Bonding技术,构建高性能、高可用的企业级虚拟化网络架构。

wind6的博客 976

《大话设计模式》学习笔记:

一、简单工厂模式v0.1 写一个计算器:   输入:a   输入:b   输入:operation(四则运算符号)   if operation then:     print...   else     print..v0.2 命名有问题,if,else判断太多,除法没有除数等于0的情况   输入:stra   输入:strb   输入:operation   switch(...

dcnis02048的专栏 953

PLECS中DLL模块的使用

PLECS中DLL模块的使用 之前发布了一篇文章,介绍如何使用PSIM中的DLL模块。而本篇文章的内容与之类似,不过主角换成了PLECS。 PLECS和PSIM类似,也属于电力电子仿真软件,使用方便,仿真速度快,和Matlab也有一定的联系,有兴趣的可以去试试。PLECS可以利用外部动态链接库(DLL)来调用外部的代码参与仿真,方便复杂控制算法的实现,也有利于后期直接将代码移植到硬件控制器上。

OptimisticPoplar的博客 2710

Windows 11安装 SQLServer 2008 R2 失败问题处理

Windows 11安装SQL Server 2008 R2失败解决方案 由于Windows 11移除了对PowerShell 2.0的支持,导致SQL Server 2008 R2安装失败。经过多次尝试,最终通过**方案六(修改注册表模拟PowerShell 2.0环境)**成功安装。其他可行方案包括: 使用SP3集成版安装包 通过命令行跳过检查(/SUPPRESSPOWERShellCHECK参数) 创建特殊配置文件 替代方案建议: 使用Docker容器运行 在虚拟机中安装 升级到新版SQL Serve

oDengWei的博客 7157

洗礼灵魂,修炼python(2)--python安装和配置

安装python和基本配置: python官方下载地址:www.python.org 打开网站,然后下载对应(32位和64位,windows版还是linux版)的版本,你可以选择python3或者2,目前python2企业用的多,为什么呢?因为目前(注意我的博文发布时间)很多第三方模块还是对python2支持以及更好的配合,python3很多模块都不太兼容。但是有个问题,pyt...

dingyu6453的博客 162

Visionpro 使用CogPMAlignTool工具提取匹配轮廓点

【代码】Visionpro 使用CogPMAlignTool工具提取匹配轮廓点。

weixin_43947315的博客 2091

洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器

用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式。 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先匹配到进行计算再把计算结果替换到式子中,然后再根据小括号计算,直到没有小括号再按照加减乘除优先级计算,最后计算出结果。每次计算前把加减乘除符号格式化一下,比如有+和-同时存在的时...

dingyu6453的博客 135

【Segment Anything Model】十(1):利用SAM做分类任务,方法二,不放过SAM强大特征提取能力,将SAM提取到的ImageEmbedding插入到其他cnn网络中

直接黏贴复制就好'''该类定义了VGG-16的基本结构。features: 代表VGG网络的主体部分,即所有的卷积层和池化层。avgpool: 是自适应平均池化层,将特征图大小调整为7x7。classifier: 是VGG网络的分类部分,由全连接层组成。_initialize_weights(): 初始化权重的方法。

cvxiayixiao的博客 3561

CDD数据库文件制作(三)——服务配置(0x10)

根据诊断调查表进行每一步配置的详细操作,与背后逻辑解释 1.会话切换配置 1.1.根据诊断调查表进行信息提取(0x1001) 1.2.会话转换配置(0x1001) 1.3.根据诊断调查表进行信息提取(0x1002) 1.4.会话转换配置(0x1002) 1.5.根据诊断调查表进行信息提取(0x1003) 1.6.会话转换配置(0x1003) 1.7.会话切换配置完成后效果图 2.安全等级配置信息提取 2.1.安全访问配置(0x1001) 2.2.安全访问配置(0x1002) 2.3.安全访问配置(0x100

LOVE135149的博客 5838

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 966

基于知识图谱的智能决策系统

作者:禅与计算机程序设计艺术 1.简介 知识图谱(Knowledge Graph)最早由美国斯坦福大学的Jure Sifne等人于2013年提出,它是一个用于存储、整理和推理复杂多变的网络结构信息的数据模型。它的基本特征是每个事实都有一个统一的标识符ID,并且可以以图形的方式展示各种关系及其边缘。因此,

AI天才研究院 2184

洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assign

闭包(lexical closure)什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下不多说,看例子:def funx(x): def funy(y): return x*y #此时的funy函数对外层funx函数的变量调用,则称为闭包 return funy 结果:>>> i=funx(4) >>&g...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 2721

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句

所有的编程语言里都有判断语句和循环语句。判断语句则是用来分支程序流程的循环语句则是为了实现一个效果,让程序的规律性的重复操作不用说,分支和循环自然在python里也是有的一,条件判断:if,if……else1.在python里if可以单独出现,也可以和else配套出现,但是else不能单独出现这里则要提到一个在编程里一个共有的特性:悬挂else:即出现多余或者不和if匹配的else,就叫悬挂els...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 794

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍

decimal1.作用:用于浮点数计算。相比内置的二进制浮点数实现 float这个类型有助于 金融应用和其它需要精确十进制表达的场合,控制精度,控制舍入以适应法律或者规定要求,确保十进制数位精度,或者用户希望计算结果与手算相符的场合。Decimal 重现了手工的数学运算,这就确保了二进制浮点数无法精确保有的数据精度。 高精度使 Decimal 可以执行二进制浮点数无法进行的模运算和等值测试2.函数...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 644

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洗礼灵魂,修炼python(1)--python简介

首先,本人也是刚接触python短短几个月,没有老鸟的经验和技能,大佬勿喷,以下所有皆是本人对python的理解 python,是一种解释型(高级)的,面向对象的,带有动态语义的高级程序设计的开源语言。1989年,Guido von Rossum(荷兰人)人称龟叔,他在圣诞节时因为无聊而开发出来的,详细的python发展史介绍可以百度或Google,已经很多了,不再赘述。 python是从20

app安全逆向、移动开发、tls/ja3、爬虫、反爬 592

洗礼灵魂,修炼python(7)--元组,集合,不可变集合

前面已经把列表的基本用法讲解完接着讲python的几大核心之——元组(tuple)1.什么是元组?类似列表,但为不可变对象,之前提到列表是可变对象,所谓可变对象就是支持原处修改,并且在修改前后对应的内存空间里的id依然不变,而不可变对象就是不支持原处修改,得重新赋值才行,但在重新赋值的时候,内存ID已经发生改变。元组的特征是什么呢?下面会解释!2.创建元组的两种方式:注意:元组的特征是()没错,但...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 520

洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器

是的,我是想到什么知识点就说什么,没有固定的主题,我的标题都是在写完博客再给的。本篇博文说说列表进阶话题。其实列表应该是比较熟悉的了,而毫不夸张的说,在实际的开发中,列表也是使用的最多的,以后你会体会到我说的这句话的。列表解析1.什么是列表解析:根据已有列表,高效生成新列表的方式,还有另一个叫法是叫列表推导式2.作用:列表解析是python迭代机制的一种应用,它常用于实现创建新的列表,因此要放置在...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 512

洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合

多重继承关于继承在上一篇博文已经说过了,怎么继承相信你也懂了。那么进入进阶话题,多重继承1.什么是多重继承继承的概念你清楚,那么多重继承就简单了。我的理解就是子类继承多个基类2.怎么多重继承定义多个基类,然后子类定义时继承多个基类,这就是多重继承。例1: 其实就和前面的一般继承是一样的对吧?就只是传入的基类由一个成了两个或多个而已 例2:定义一个儿子继承父母特征的子类class Human: ...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 494

洗礼灵魂,修炼python(19)--文件I/O操作,linecache,fileinput模块

文件I/O操作1.什么是文件I/O操作首先I/O(input/output),即输入/输出端口,然后文件,大家应该都是是什么,一个数据,一个txt或者html文档就是一个文件。文件操作就是对文件进行读写删除等的操作。文件I/O操作,个人理解,就是与用户有交互式的文件操作,换句话就是读写操作文件也是一个可迭代对象2.有哪些操作:1):I/O操作:raw_input函数,input函数即可以进行I/O...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 478

洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块

定制魔法方法1.什么是定制魔法方法首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义。而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过是龟数开发python时已经给出了,已经自带了基本能想到的功能都带有了,换句话就是已经给我们事先定义好了,要用的话,直接拿来就用就是,不需要我们自己再去定义。定制魔法方法就是自定义魔法方法了。但是必须遵循...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 460

洗礼灵魂,修炼python(3)--从一个简单的print代码揭露编码问题,运行原理和语法习惯

前期工作已经准备好后,可以打开IDE编辑器了,你可以选择python自带的IDLE,也可以选择第三方的,这里我使用pycharm——一个专门为python而生的IDE按照惯例,第一个python代码打印一个所有开发语言里入门必学“hello,world”?no,你错了,我偏不 第一行是编码,utf-8这是国际使用标准,如果我不加的话,很容易出错第二行print(打印的意思)语句,是python的关...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 449

洗礼灵魂,修炼python(18)--温故加知新

类型转换:1.str(),repr(),format():将非字符串数据转换为字符串str():对象序列化的结果,相当于print输出repr():程序中某个对象精确值format():利用特定格式转换为字符串,format函数用法见后面2.int():转为整数形int函数也可以使用进制:(这个在前面已经提到过的)  Int转换类型并给定进制的方法,并不是都可行: 3.complex():转换为复...

app安全逆向、移动开发、tls/ja3、爬虫、反爬 447
上一篇: 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
下一篇: 洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合
geekbyte.
博客等级 码龄11年 308粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值