python 的继承重写和 super函数

2023-10-27

1 super函数实现父类方法的继承和重写

class Car1:   
	def __init__(self, color, weight):  
		self.color = color
		self.wheel = 4
		self.weight = weight
		self.speed = 0
		
	def run_up(self, arg):   # 父类中的run_up方法
		self.speed += arg
		print("汽车加速了,速度:", self.speed)		
		
	def run_down(self, arg):
		self.speed -= arg
		print("汽车减速了,速度:", self.speed)		
		
	def stop(self):
		self.speed = 0
		print("汽车停下来了")	
		
		
class Car2(Car1):
	def __init__(self, sign, type, air):
		self.sign = sign
		self.type = type
		self.car_air = air
	# 子类重写run_up方法
	def run_up(self, *arges, **kwargs):   #覆盖
		Car1.speed = 0
		super().run_up(*arges, **kwargs)
		# print("车辆牌子是{},型号是{},空调系统是{}".format(self.sign, self.type, self.car_air))		
	def run_down(self):   #覆盖
		print("车辆牌子是{},型号是{},空调系统是{}".format(self.sign, self.type, self.car_air))
		
		
taxi = Car1("red", weight=100)
taxi.run_up(20)
taxi.run_down(10)
taxi.stop()

aodi = Car2(sign="aodi", type="f103", air="357a159")

aodi.run_up(30)
aodi.run_down()
aodi.stop()

运行结果
运行结果

2 继承的顺序__mro__

class A:
    def __init__(self):
        print("A")


class B(A):
    def __init__(self):
        print("B")
        super().__init__()


class C(A):
    def __init__(self):
        print("C")
        super().__init__()


class D(B, C):
    def __init__(self):
        print("D")
        super().__init__()


if __name__ == '__main__':
    d = D()     # D  B C A Object  继承顺序遵循C3算法(Python3)
    print(D.__mro__)  # 打印出D类的继承的先后顺序
	# 继承顺序是找父类,父类没有就找父类的父类,以此类推

参考他人博客解析C3算法

3 Python的自省机制

利用自省的函数方法,在程序运行时得知对象的类型,判断对象是否存在某个属性,访问对象的属性。

dir(), # 返回一个列表(子类继承相关)
type(), # 判断变量的数据类型
hasattr(), # 判断对象是否包含对应的属性
isinstance() # 判断变量/类是否正确或者存在继承关系

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 的继承重写和 super函数 的相关文章

随机推荐

  • 计算机系统结构:流水线技术总结

    文章目录 什么是流水线 流水线的分类 流水线的性能指标 流水线设计中的若干问题 非线性流水线的调度 单功能非线性流水线的最优调度 多功能非线性流水线的调度 一条经典的5段流水线 相关与流水线冲突 结构冲突 因硬件资源满足不了指令重叠执行的要
  • 基于Pytorch实现LSTM(多层LSTM,双向LSTM)进行文本分类

    LSTM原理请看这 点击进入 LSTM nn LSTM input size hidden size num layers 1 nonlinearity tanh bias True batch first False dropout 0
  • Cesium加载Supermap的wmts服务

    最近使用cesium 加载supermap的wmts 服务 多次遇到加载异常与白页面问题 纠结好久最后才搞定 特此记录 1 首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvide
  • nginx配置防止域名恶意解析

    前几发生一件事情 就是通过nginx日志发现有一个域名恶意指向到了我的服务器 大家可以去查查域名恶意解析可能会造成的危害 由于我是用的nginx配置了一个反向代理 所以直接配置nginx就可以实现域名恶意解析的问题了 首先打开我们的ngin
  • Hyperledger Fabric 入门笔记(四)Fabric V2.4 测试网络基础

    文章目录 前言 一 准备测试网络 1 1 概述 1 2 完成准备工作 1 2 1 运行install fabric sh脚本 1 2 2 文件夹去锁 可选 1 3 install fabric sh脚本运行结果 1 4 什么是二进制文件 1
  • 计算机毕业设计题目100例

    文章目录 0 前言 1 java web 管理系统 毕设选题 2 java web 平台 业务系统 毕设选题 3 游戏设计 动画设计类 毕设选题 适合数媒的同学 4 算法开发 5 数据挖掘 毕设选题 6 大数据处理 云计算 区块链 毕设选题
  • iOS学习之iOS沙盒(sandbox)机制和文件操作(一)

    1 iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件 不可以去其它地方访问 此区域被成为沙盒 所以所有的非代码文件都要保存在此 例如图像 图标 声音 映像 属性列表 文本文件等 1 1 每个应用程序都有自己的存储空间
  • 移动硬盘安装centos8

    买了个西数固态移动硬盘想要安装centos8 感觉应该很简单没想到也有不少坑 1 下载iso https www centos org download X86 64版本的 CentOS 8 4 2105 x86 64 dvd1 iso 为
  • Java包名与包路径

    很多初学者以为只要把生成的class文件放在某个目录下 这个目录名就成了这个类的包名 这是一个错误的看法 不是有了目录 结构 就等于有了包名 为Java类添加包必须在Java源文件中通过 package语句指定 单靠目录名是没法指定的 Ja
  • Hive对库对表的操作

    目录 前期工作 1 Hive对库的操作 2 Hive对表的操作 3 Hive的分区表 前期工作 需提前启动服务端 hiveserver2 和客户端 beeline u jdbc hive2 192 168 67 110 10000 n ro
  • 如何判断一个请求是否为Ajax请求

    Ajax请求中主要对象 原生对象 是XMLHttpRequest 知道了该对象 那么就可以通过判断请求头属性来鉴别当前请求 判断当前请求是否为Ajax public static boolean isAjaxRequest HttpServ
  • typora文章同步(跨平台)

    typora实现备份 个人博客 一 图片上传 PicGo有提供默认的图床 可以直接使用 但是有上传的限制 有特定要求的可以自己配置github图床 1 配置github图床 利用github搭建图床 2 安装PicGo 下载链接 windo
  • 【判断题】【简答题】【数据库原理】

    文章目录 一 判断题 二 简答题 一 判断题 1 数据的安全性主要防范的对象是合法用户 正确答案 错 2 数据库恢复是利用冗余数据来重建数据库 正确答案 对 3 定义外键级级联是为了保证相关表之间数据的一致性 正确答案 对 4 创建唯一性索
  • React小技巧-React.memo useMemo useCallback

    React小技巧 React memo useMemo useCallback 原文 https piyushsinha tech series optimizing react ck subscriber id 1555690090 本文
  • TV服务器的安装维护和调试,广电机顶盒安装调试教程及系统设置密码

    QQ截图20160813140648 png 931 06 KB 下载次数 3 2016 8 13 14 43 上传 电视机与机顶盒正确连接后 打开电视机和机顶盒的电源开关 并按电视机遥控器的视频切换键 TV 切换到IPTV界面 第一步 进
  • Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示 1 普通可视化界面编程代码入门 import sys from PyQt5 QtWidgets import QWidget QApplication 导入两个类来进行程序界面编程 if n
  • leetcode 5 最长回文子串

    题目 给你一个字符串 s 找到 s 中最长的回文子串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 解析 这道题和之前的那道回文的很像 647回文子
  • Vue2.0教程

    一 Vue入门 1 概述 在众多的语言排名中 JavaScript 已经非常靠前 它是前端的核心编程语言 我们可以利用 js 开发 动态 效果的网页 也可以开发 app 为了简化 JavaScript 的使用 在其基础上 发展出两个门派 真
  • C++ 用两个栈实现一个队列

    首先我们要看看栈和队列的特点 栈的特点 先进后出 队列的特点 先进先出 队列的出队顺序与栈的出栈是相反的 我们把数据压入第一个栈 如果再把这个栈里面的元素依次压入第二个栈 此时栈2里面的元素的顺序 相当于对一组数据进行了两次倒序 此时对第二
  • python 的继承重写和 super函数

    1 super函数实现父类方法的继承和重写 class Car1 def init self color weight self color color self wheel 4 self weight weight self speed