Python学习09:继承与多重继承

2023-11-13

本文学习Python的笔记,仅供参考


继承

熟悉C++的都应该了解继承了,简单的说一个类继承另外一个类, 可以获得继承类的属性和方法,继承的类称为子类,被继承的类称为父类,比如说人类算是非常大的一个类了,如果按照职业分可能会分为学生类,教师类,工程师类等,其实人类一些共有的属性,学生类和教师类都有,所以学生类完全就可以继承人类,拥有公用的属性。

下面我写了一个Person类,这个类有一个run方法,有一个Student类这个类什么都没有,继承与Person类,可以看到object变成父类的名字即可完成继承。

class Person(object):
    def run(self):
        print("Persion is running")

class Student(Person):
    pass
看下子类是否能继承父类的方法:

>>> b = Student()
>>> b.run()
Persion is running
OK , 可以看到调用子类run方法,因为子类没有,就执行的父类的run方法。

从此可以看出,子类获取了父类的功能,这样可以节约代码了

当然假设Student 有自己的方法呢?会是什么样子,可以尝试一下:

>>> class Student(Person):
    def run(self):
        print("Student is running")

        
>>> c = Student()
>>> c.run()
Student is running
可以看到如果Student有自己的run方法,那么就 执行自己的。

也就是说当子类和父类有相同的方法的时候,也称为子类的run()方法覆盖了父类的方法的时候,就会自动调用子类的方法,这也是继承的另一个好处,多态。

多态

1. 任何以父类作为参数的函数,在不用修改的前提下子类都可以正常运行,也就是说我们如果传入很多子类的时候比如Student,Teacher等,我们只需要接收Person这个类型即可, 原则上子类可以向上转型为父类的类型。

2,.对于一个变量,我们无需知道属于哪个子类,但是如果知道属于哪个父类,那么我们可以完全的去调用父类的方法,由于多态,肯定能找到对应子类的方法。

OK 我们用实例验证下2点,第一点我们写一个函数参数是Person

class Person(object):
    def run(self):
        print("Persion is running")

class Student(Person):
    def run(self):
        print("Student is running")
    
def run_man(person):
    person.run()
    person.run()

run_man(Person())
run_man(Student())
可以看到run_man是person类的变量,但是我们在运行子类的时候,仍可以动态的找到子类的函数,并且不用修改run_man就兼容父类子类。

======================== RESTART: E:/python/person.py ========================
Persion is running
Persion is running
Student is running
Student is running

多重继承

其实这个挺容易理解的,比如动物可以分为哺乳类和鸟类,然后根据能跑和能飞,又要进行一次分类,对于狗,可以归属于哺乳类和能跑的。其实多重继承就可以完成这个功能:

class Runnable(object):
    def run(self):
        print('Running...')

class Flyable(object):
    def fly(self):
        print('Flying...')
能飞和能跑的类,然后还有一个哺乳类和鸟类

class Animal(object):
    pass

# 大类:
class Mammal(Animal):
    pass

class Bird(Animal):
    pass
如果定义一个Dog类,则可以继承Mammal类和Runnable类

class Dog(Mammal, Runnable):
    pass
OK ,这样Dog就继承了Mammal和Runnable的功能。







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

Python学习09:继承与多重继承 的相关文章

  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • 使用 Marshmallow 中的数据更新行 (SQLAlchemy)

    我正在使用 Flask Flask SQLAlchemy Flask Marshmallow marshmallow sqlalchemy 尝试实现 REST api PUT 方法 我还没有找到任何使用 SQLA 和 Marshmallow
  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 使用 Flask SQLAlchemy 进行表(模型)继承

    我遵循了这个建议question https stackoverflow com questions 1337095 sqlalchemy inheritance但我仍然收到此错误 sqlalchemy exc NoForeignKeysE
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 垂直线 axvline 在 matplotlib 的 loglog 图中绘制位于错误位置的线

    我在使用 axvline 在 matplotlib 的 loglog 图中绘制垂直线时遇到问题 第一个问题是垂直线没有出现在正确的位置 第二个问题 可能相关的是 当我放大或平移绘图时 垂直线只是保持在原位 并且没有通过平移 滑动绘图 或放大
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • 在 Python 中比较日期 - 如何处理时区修饰符

    我正在做Python日期比较 假设我有一个这样的约会 Fri Aug 17 12 34 00 2012 0000 我按以下方式解析它 dt datetime strptime Fri Aug 17 12 34 00 2012 0000 a
  • 用于打印 C/C++ 文件的所有函数定义的 Python 脚本

    我想要一个 python 脚本来打印 C C 文件中定义的所有函数的列表 e g abc c定义两个函数为 void func1 int func2 int i printf d i return 1 我只想搜索文件 abc c 并打印其中
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • Python:如何重构循环导入

    我有件事可以帮你做engine setState
  • 超时时杀死或终止子进程?

    我想尽可能快地重复执行子进程 然而 有时这个过程会花费太长的时间 所以我想杀死它 我使用 signal signal 如下所示 ppid pipeexe pid signal signal signal SIGALRM stop handl
  • Python将csv数据导出到文件中

    我有以下运行良好的代码 但我无法修剪数据并将其存储在数据文件中 import nltk tweets love this car this view amazing not looking forward the concert def g
  • 如何在 Numpy 中实现垃圾收集

    我有一个名为main py 它引用另一个文件Optimisers py它仅具有功能并用于for循环进入main py 这些函数都有不同的优化功能 This Optimisers py然后引用另外两个类似的文件 其中也只有函数 它们位于whi
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • Pandas - 分割大的Excel文件

    我有一个大约有 500 000 行的 Excel 文件 我想将其拆分为多个 Excel 文件 每个文件有 50 000 行 我想用熊猫来做 这样它会是最快和最简单的 有什么想法如何制作吗 感谢您的帮助 假设您的 Excel 文件只有一个 第
  • 如何在 Pandas 数据框中用 NaN 替换一系列值?

    我有一个巨大的数据框 我应该如何用 NaN 替换一系列值 200 100 数据框 您可以使用pd DataFrame mask https pandas pydata org pandas docs stable generated pan
  • 如何在 Python 中解析损坏的 XML?

    我无法影响的服务器发送的 XML 非常损坏 具体来说 Unicode WHITE STAR 将被编码为 UTF 8 E2 98 86 然后使用 Latin 1 转换为 HTML 实体表 我得到的是 acirc 98 86 9 个字节 位于声
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y

随机推荐

  • 你一无所有,你拥有一切

    你一无所有 你拥有一切 当看到这一篇文章标题的时候 会引起你怎样的共鸣呢 人总是需要从别处获得力量的 我想与更多的人分享 以此勉励我们自己 一 嘴上说说的人生 那年我在离家的时候一个劲地往自己的硬盘里塞 灌篮高手 我妈一副嗤之以鼻的表情看着
  • VMware16安装步骤与初步使用避免踩坑的安装教程

    VMware16安装步骤与初步使用避免踩坑的安装教程 一 软件介绍 VMware Workstation 中文名 威睿工作站 是一款功能强大的桌面虚拟计算机软件 提供用户可在单一的桌面上同时运行不同的操作系统 和进行开发 测试 部署新的应用
  • Fisco Bcos区块链三(WeBASE中间件平台一键部署)

    文章目录 区块链开荒 技术文档 https webasedoc readthedocs io zh CN latest index html 二 WeBASE一键部署 1 前提条件 1 检查环境 1 平台要求 2 检查Java 3 检查my
  • EfficientNet详解

    EfficientNets EfficientNets NAS neural architecture search Single Scaling Compound Scaling EfficientNet Rethinking Model
  • TheDAO被攻击事件考察报告

    作者 ChinaLedge联盟 段玺 Andy Dan 简介 北京时间2016年6月17日发生了在区块链历史上留下沉重一笔的攻击事件 由于 其编写的智能合约存在着重大缺陷 区块链业界最大的众筹项目TheDAO 被攻击前 拥有1亿美元左右资产
  • Android-Notes|BottomNavigationView-爱上-Lottie,android高级开发面试题

    复制代码 封装个 BasicData 存放 App 内置的一些基本数据 这里主要针对 Lottie 文件 val mNavigationAnimationList arrayListOf LottieAnimation HOME Lotti
  • ORA-16009 remote archive log destination must be a STANDBY database

    ORA 16009错误处理 问题描述 主备在做Switchover切换时 在切换后的备库报如下错误 Wed Jul 22 04 49 02 2015 Errors in file u01 app oracle admin orcl bdum
  • 监控告警02--夜莺飞书告警-v4版本

    监控告警02 夜莺飞书告警 v4版本 1 介绍 2 方法 2 1 源码改动 2 2 测试效果 3 说明 1 介绍 v4版本的夜莺集成了shell api wechat wechat robot dingtalk robot 等5中常见的告警
  • docker环境下部署zabbix

    docker环境下部署zabbix 注 安装时出现的问题及解决办法在最下面 docker zabbix 使用docker搭建zabbix服务 Zabbix 介绍 zabbix 音同 z bix 是一个基于WEB界面的提供分布式系统监视以及网
  • OpenGL学习之创建天空盒

    本文主要参考了立方体贴图的基本原理 首先回顾一下什么是立方体贴图 将多个纹理组合起来映射到一个单一纹理 就是立方体贴图 Cube Map 基本上说立方体贴图它包含6个2D纹理 这每个2D纹理是一个立方体 cube 的一个面 也就是说它是一个
  • go+vue自建运维管理平台

    文章目录 鲁班运维平台 容器管理 集群管理 namespace管理 节点管理 工作负载 存储管理 网络管理 配置管理 事件中心 kuboard 鲁班运维平台 这个平台和spug很像 感觉就像是spug运维平台的容器版本 但是如果是容器平台则
  • js基础——运算符

    一 判断一个变量是否为数值 使用 isNaN 判断一个变量是不是数值 is not a number 语法 isNaN x 作用 检测x是否是非数字 是非数字结果是true 不是非数字结果是false 即数字返回为false 不是数字返回为
  • Bad owner or permissions on C:\\Users\\USER/.ssh/config on Windows

    Bad owner or permissions on C Users USER ssh config 问题描述 由于使用vscode远程连接服务器突然新增了C Users USER ssh config 再powershell cmd下面
  • leetcode刷题(8.13总结)

    1 有效的括号 题目描述 https leetcode cn problems valid parentheses class Solution def isValid self s str gt bool stack count 0 if
  • Linux Eclipse配置C++多线程开发环境

    Linux系统下的多线程遵循POSIX线程接口 称为pthread 编写Linux下的多线程程序 需要使用头文件pthread h 连接时需要使用库libpthread a 头文件直接 include
  • 【关系推导】Codeforces Round #813 (Div. 2) E1. LCM Sum (easy version)

    参考题解 题意 T T T 组数据 每组数据给定 l l l 和 r r
  • Tomcat开启JMX监控

    背景 Tomcat系统运行过程出现错误 需要打开JMX 添加对JVM的监控 Tomcat运行在CentOS中 前提 监控端windows系统 安装JDK 步骤如下 1 服务器关闭Tomcat cd opt apache tomcat 7 0
  • 【论文翻译-3】Attention U-Net: Learning Where to Look for the Pancreas

    Attention U Net Learning Where to Look for the Pancreas 阅读日期 2020年11月25日 Abstract 我们提出新型注意力门控 attention gate AG 模型用于医学成像
  • 恒玄BES2300XX系列常用接口(1)

    app ibrt ui pairing mode test 先回连手机 回连不上进才配对 app tws ibrt set access mode 设置访问模式 app ibrt if pairing mode refresh 断开手机 进
  • Python学习09:继承与多重继承

    本文学习Python的笔记 仅供参考 继承 熟悉C 的都应该了解继承了 简单的说一个类继承另外一个类 可以获得继承类的属性和方法 继承的类称为子类 被继承的类称为父类 比如说人类算是非常大的一个类了 如果按照职业分可能会分为学生类 教师类