当前位置: 首页 > news >正文

python 继承和多态

在已有类的基础上创建新类,这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。提供继承信息的我们称之为父类,也叫超类或基类;得到继承信息的我们称之为子类,也叫派生类或衍生类。子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力,在实际开发中,我们经常会用子类对象去替换掉一个父类对象,这是面向对象编程中一个常见的行为,对应的原则称之为[里氏替换原则](https://zh.wikipedia.org/wiki/%E9%87%8C%E6%B0%8F%E6%9B%BF%E6%8D%A2%E5%8E%9F%E5%88%99)。下面我们先看一个继承的例子。

class Person(object):"""人"""def __init__(self, name, age):self._name = nameself._age = age@propertydef name(self):return self._name@propertydef age(self):return self._age@age.setterdef age(self, age):self._age = agedef play(self):print('%s正在愉快的玩耍.' % self._name)def watch_av(self):if self._age >= 18:print('%s正在观看爱情动作片.' % self._name)else:print('%s只能观看《熊出没》.' % self._name)class Student(Person):"""学生"""def __init__(self, name, age, grade):super().__init__(name, age)self._grade = grade@propertydef grade(self):return self._grade@grade.setterdef grade(self, grade):self._grade = gradedef study(self, course):print('%s的%s正在学习%s.' % (self._grade, self._name, course))class Teacher(Person):"""老师"""def __init__(self, name, age, title):super().__init__(name, age)self._title = title@propertydef title(self):return self._title@title.setterdef title(self, title):self._title = titledef teach(self, course):print('%s%s正在讲%s.' % (self._name, self._title, course))def main():stu = Student('王大锤', 15, '初三')stu.study('数学')stu.watch_av()t = Teacher('骆昊', 38, '砖家')t.teach('Python程序设计')t.watch_av()if __name__ == '__main__':main()

子类在继承了父类的方法后,可以对父类已有的方法给出新的实现版本,这个动作称之为方法重写(override)。通过方法重写我们可以让父类的同一个行为在子类中拥有不同的实现版本,当我们调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为,这个就是多态(poly-morphism)。

from abc import ABCMeta, abstractmethodclass Pet(object, metaclass=ABCMeta):"""宠物"""def __init__(self, nickname):self._nickname = nickname@abstractmethoddef make_voice(self):"""发出声音"""passclass Dog(Pet):"""狗"""def make_voice(self):print('%s: 汪汪汪...' % self._nickname)class Cat(Pet):"""猫"""def make_voice(self):print('%s: 喵...喵...' % self._nickname)def main():pets = [Dog('旺财'), Cat('凯蒂'), Dog('大黄')]for pet in pets:pet.make_voice()if __name__ == '__main__':main()

在上面的代码中,我们将Pet类处理成了一个抽象类,所谓抽象类就是不能够创建对象的类,这种类的存在就是专门为了让其他类去继承它。Python从语法层面并没有像Java或C#那样提供对抽象类的支持,但是我们可以通过abc模块的ABCMeta元类和abstractmethod包装器来达到抽象类的效果,如果一个类中存在抽象方法那么这个类就不能够实例化(创建对象)。上面的代码中,DogCat两个子类分别对Pet类中的make_voice抽象方法进行了重写并给出了不同的实现版本,当我们在main函数中调用该方法时,这个方法就表现出了多态行为(同样的方法做了不同的事情)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

个性化个人主页html5模板

介绍: 个性化个人主页html5模板 网盘下载地址: http://kekewl.net/tARDuX5n02U0 图片:...

java IO教程《三》

缓冲区流讲解(Buffered) 什么是缓冲区? 缓冲流,也叫高效流,是对4个基本的File流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream,BufferedOutputStream字…...

elementUI-Tree 树形控件的使用

elementUI-Tree 树形控件的使用 实现效果: 控件的官方使用说明 控件要求返回的数据结构 {"success": true,"code": 20000,"message": "成功","data": {"items": [{"id": "1394579386…...

Mac os下通过Anaconda在远程服务器配置python虚拟环境

一、SSH管理软件 这里推荐一款本人正在使用的软件,Termius。Termius是一款非常好用而且漂亮的SSH客户端,能快速远程控制服务器,可以定制自己喜欢的主题.Termius不仅涵盖了Windows、Linux、OSX,还变态得支持Android和iOS&#xff…...

Labview需求(部分)

本人从事工控行业多年,有一些资源,目前labview的单子干不过来了,想找几个靠谱的labview工程师跟我合作,想做兼职,接单的labview工程师可以私聊我,另外我有一些项目还需要跟单片机工程师,plc工程师,fpga工程师合作,欢迎大家找我合作!以下是手里比较着急的项目,需要外包 需求1&am…...

2021java1年经验公司面试真题

1面我就省略了,主要就是看你的以前工作情况,以前工作内容能不能清晰表达,还有一些简单的java基础问题,大概20多分钟。二面就是40分钟基础,20分钟业务,10分钟个人情况。下面是二面问题 1.自我介绍 做一下自…...

Unity基础之C#核心篇笔记4:多态

Unity基础之C#核心篇笔记4:多态多态1.多态的概念2.解决的问题3.多态的实现4.总结抽象类和抽象方法1.抽象类2.抽象函数3.总结4.练习题接口1.接口的概念2. 接口的申明3.接口的使用4.接口可以继承接口5.显示实现接口6.总结7.练习题密封方法1.密封方法基本概念2.实例3.总…...

LeetCode每日一题 - 有多少小于当前数字的数字

题目&#xff1a; 给你一个数组 nums&#xff0c;对于其中每个元素 nums[i]&#xff0c;请你统计数组中比它小的所有数字的数目。 换而言之&#xff0c;对于每个 nums[i] 你必须计算出有效的 j 的数量&#xff0c;其中 j 满足 j ! i 且 nums[j] < nums[i] 。 以数组形式返回…...

用Python爬取彼岸图网图片

用Python爬取彼岸图网图片 *使用了 四个模块 import time import requests from lxml import etree import os 没有的话自行百度安装。 #encoding utf-8 import time import requests from lxml import etree import os# http://www.netbian.com/ 爬虫 if __name__ __mai…...

第k个数(快速选择)

算法思路 快速选择&#xff1a; 1.即任意选一个数&#xff0c;将数组划分为二。 2.最终根据该数所在的位置&#xff0c;即第&#xff1f;大&#xff0c;选择第k大的数字所在区间进行划分。 时间复杂度分析&#xff0c;第一次划分n,下一次划分期望n/2&#xff0c;n/4…累加和小…...

yolov5 detect.py报错

新手求助 yolov5训练了自己的数据集后&#xff0c;test没问题&#xff0c;但是运行detect.py就报错了&#xff0c;一直找不到问题所在&#xff0c; 求大佬指点指点...

DEX 争霸战火升级,BabySwap 会否成为下一代黑马?

在 AMM机制大力推动下&#xff0c;DEX的群雄争霸比预想中来得要快且凶猛。伴随着诸如高盛等主流资本逐步认可DeFi 的意义&#xff0c;在真正的去中心化金融爆发的前夜&#xff0c;可以说谁抢占了DEX 红海的先机&#xff0c;谁就赢得了未来。 从早期以太坊的Uniswap和DoDo&…...

flutter 常用的第三方组件

引用文章链接&#xff1a; https://www.jianshu.com/p/a523e5f131b2 1、格式化日期时间组件&#xff1a;https://pub.dev/packages/date_format 2、日期选择组件&#xff1a;https://pub.dev/packages/flutter_cupertino_date_picker 3、轮播图组件&#xff1a;https://pub.…...

Android面试回忆录:帮助程序员提高核心竞争力的30条建议,真香!

**新技术层出不穷&#xff0c;去年kotlin到如今Flutter&#xff0c;技术迭代&#xff0c;你是否会变得固步自封&#xff1f;**那么看本篇文章帮你解决问题&#xff0c;让你知道怎么样学习&#xff0c;学习那些技术点才能不被时代的迭代快速淘汰&#xff01; 首先&#xff0c;先…...

2021-05-30解决centos+宝塔面板,FTP传输421 Too many connections问题错误

解决centos宝塔面板&#xff0c;FTP传输421 Too many connections”问题错误 1、首先连入服务器 在/www/server/pure-ftpd/etc下&#xff0c;找到pure-ftpd.conf 2、vim pure-ftpd.conf 没有vim的&#xff0c;用其他编辑软件也可以 3、找到 #Maximum number of sim clients wit…...

RK3399 DDR频率修改

RK3399 DDR频率修改 一、DDR当前频率获取与可调节范围 1、获取当前DDR频率、可调值、容量 cat /sys/class/devfreq/dmc/cur_freq2、查看DDR频率可调节的值 cat /sys/class/devfreq/dmc/available_frequencies3、获取DDR容量 cat /proc/meminfo二、DDR测试定频 1、因为RK3…...

javascript正则表达式常用合集

javascript正则表达式常用的合集 参考网址 {n}: n 是一个正整数&#xff0c;匹配了前面一个字符刚好出现了 n 次 {n,}: n是一个正整数&#xff0c;匹配前一个字符至少出现了n次 {n,m}: n 和 m 都是整数。匹配前面的字符至少n次&#xff0c;最多m次。如果 n 或者 m 的值是0&…...

qApp加载qss技巧

使用Qt加载qss样式&#xff0c;一般操作是读取文件&#xff0c;通过setStyleSheet设置 但是qApp只需如下&#xff1a; qApp->setStyleSheet("file:///:/test.qss");//只适用于qApp...

发现一款好用到爆的数据库工具 - DataGrip(就是耗内存)

作者&#xff1a;Atzuge cnblogs.com/zuge/p/7397255.html 最近看到一款数据库客户端工具&#xff0c;DataGrip&#xff0c;是大名鼎鼎的JetBrains公司出品的&#xff0c;就是那个出品Intellij IDEA的公司。 - 就是耗内存 DataGrip是一款数据库管理客户端工具&#xff0c;方便…...

Java 类加载器(ClassLoader)的实际使用场景有哪些?

什么是classloader classloader顾名思义&#xff0c;即是类加载。虚拟机把描述类的数据从class字节码文件加载到内存&#xff0c;并对数据进行检验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这就是虚拟机的类加载机制。了解java的类加…...

中国石油大学《混凝土》第三阶段在线作业

第三阶段在线作业单选题 (共24道题) 收起1.&#xff08;2.5分&#xff09; 混凝土构件的平均裂缝间距与下列因素无关的是 A、混凝土强度等级 B、混凝土保护层厚度 C、纵向受拉钢筋直径 D、纵向钢筋配筋率我的答案&#xff1a;A 此题得分&#xff1a;2.5分2.&#xff08;…...

MySQL面试题

一&#xff0c;三大范式 原子性必须和主键相关联不能和非主键关联 ACID事务特性 原子性&#xff1a;最小单元 一致性&#xff1a;事务开始之前和事务结束之后数据一致 隔离性&#xff1a;每个事务都是独立运行&#xff0c;互不影响 永久性&#xff1a;对事务的修改是永久保存…...

中职网络安全赛后总结(来自一位大佬的总结)

第一阶段 1. 签到 # 这个是直接送100分的2. nmap扫描 # 直接一个sV能把整题做完3. sql注入 # 就是普通的报错注入&#xff0c;直接sqlmap一下跑出来了 80端口4. 文件上传 # 这里是最闹心的地方&#xff0c;应该也是个普通的文件上传&#xff0c;但它开在443端口&#xff0…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

投顶会的流程——2021 NIPS

NeurIPS | 2021 NIPS&#xff08;NeurIPS&#xff09;&#xff0c;全称神经信息处理系统大会(Conference and Workshop on Neural Information Processing Systems)&#xff0c;是一个关于机器学习和计算神经科学的国际会议。该会议固定在每年的12月举行,由NIPS基金会主办。NI…...

《云计算开放应用架构》标准发布,阿里云持续领航云原生

简介&#xff1a;阿里云致力于为企业打造数字创新的最短路径&#xff0c;从实战中来&#xff0c;为价值而生。5月26日&#xff0c;在 2021 云原生产业大会上&#xff0c;中国信通院联合 CNCF 发布 2021 年云原生优秀案例以及技术创新案例。阿里云容器服务 ACK/Serverless K8s (…...

自适应平台AUTOSAR(Adaptive Platform AUTOSAR)平台设计(6)——通信管理

参考&#xff1a; https://zhuanlan.zhihu.com/p/336833453 1.概述 通信管理负责分布式实时嵌入式环境中应用程序之间的所有通信。 背后的概念是从实际机制中抽象出来&#xff0c;以查找和连接通信伙伴&#xff0c;以便应用程序软件的实现者可以专注于其应用程序的特定目的。…...

GitHub学习之GitHub相关的几个网站

1.https://github.community/ GitHub社区&#xff0c;在里面可以跟根底的大神进行讨论 2.https://docs.github.com/ GitHub相关文档&#xff0c;小白必看&#xff0c;我看了大概3天&#xff0c;从头到尾耐心看一篇&#xff0c;操作一遍&#xff0c;可以少踩很多坑 3.h…...

Study_microblog笔记Part 1--Jinja2的应用

模板有助于实现页面展现和业务逻辑之间的分离。 在Flask中作用Jinja2模板&#xff0c;模板被编写为单独的文件&#xff0c;存储在应用程序包内的templates文件夹中。 &#xff11;、在app下创建一个存储模板的目录templates,创建第一个模板文件&#xff0c;这个文件写在app/tem…...

vsftpd2.3.4著名笑脸漏洞复现实战

1.vsftpd手工利用 攻击机kali&#xff1a;192.168.182.133 靶机metasploit&#xff1a;192.168.182.128 先ping一下靶机看看靶机是否存活 接着使用nmap对靶机进行信息收集 这里可以看到版本是vsftpd2.3.4 漏洞是存在的 直接ftp连接靶机 用户名&#xff1a;user:) 密码随意…...

C语言的关键字及其部分关键词详细用法

1.总述 关键词是由C语言规定的具有特定意义的字符串&#xff0c;通常也称为保留字&#xff0c;用户定义的标识符不应与关键词相同&#xff0c;C语言的关键字共有32个&#xff0c;根据关键字的作用&#xff0c;可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键…...

基于微信小程序奶茶店在线点单管理系统ssm框架-计算机毕业设计

面对目前奶茶店林立的现状&#xff0c;大城市奶茶店多为连锁奶茶店他们都有统一的管理和相应的系统。但是个别小县城和小城以及城区也有不少的奶茶店多为自营&#xff0c;这就必须店长自己管理和采购原料。大型连锁的奶茶店管理系统就不适用于分散的小型奶茶店。小型奶茶店的管…...

服务端和客户端

1.一般来说&#xff0c;客户端就是我们使用的电脑(包括我们使用的浏览器IE,Firefox)&#xff1b;服务器端就是存放网页与数据库数据的服务器。 2.你是客户&#xff0c;因为你在访问&#xff0c;你访问的是服务端。去吃饭&#xff0c;你到饭店&#xff0c;你点餐你是顾客(客户端…...

土特产优选平台仿淘宝(服务器端+Android客户端+MySQL数据库)

毕业设计不小心抽中了这个Android项目&#xff0c;东拼西凑完成了个大概&#xff0c;服务器端用的ssm springboot 角色分为&#xff1a;系统管理员&#xff0c;商家和买家 系统相当粗糙&#xff0c;代码也很稚嫩&#xff0c;实在毕业设计有需要的兄弟萌&#xff0c;我可以提供…...

java漂亮的模板设计代码_JAVA模板方法设计模式——Java设计模式,写漂亮的代码——...

Java设计模式&#xff0c;写漂亮的代码————模板方法设计模式简介&#xff1a;模板方法设计模式是Java设计模式中很简单、应用非常广泛的的一种设计模式&#xff0c;该模式体现了编程的抽象思想(抽象是所有子类的共性封装)&#xff0c;仅仅使用了Java的继承机制。其实很可能…...

android系统设置之preference

ip小子博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 posts - 17, comments - 6, trackbacks - 0 公告昵称&#xff1a;ip小子园龄&#xff1a;3年4个月粉丝&#xff1a;17关注&#xff1a;0加关注<2017年11月>日一二三四五六29303112345678910111213141…...

Android入门之路 - shape的详细介绍与使用

使用shape一般都是在实现效果简单且单一&#xff0c;或 公司内无设计师的场景下 当然如果你比较懒的话&#xff0c;还是找设计要图吧&#xff0c;不过小心被藐视了… 基础知识使用方式开发实战实现效果shape常用标签shape_rectangle.xml&#xff08;长方形&#xff09;shape_ov…...

结合SwipeRefreshLayout可以上拉加载更多下拉刷新的RecyclerView

源码下载地址&#xff1a;http://download.csdn.net/detail/zhou_anzhuojinjie/9661542 话不多说直接上代码 dependencies {compile fileTree(include: [*.jar], dir: libs)androidTestCompile(com.android.support.test.espresso:espresso-core:2.2.2, {exclude group: com.a…...

什么?!UI设计了新动画特效!别说话,Drawable来救你。

一、前言 近段时间公司扩大人才储备&#xff0c;需要我去面试。大多数来面试的人当被问到Android动画的问题时候基本只会说android动画几种类型啊什么的。说用到过哪种动画&#xff0c;都说只用过简单的帧动画。其实这种情况让我听失望的&#xff0c;因为我本人还是比较喜欢动画…...

Android 图片缩放

转自&#xff1a;http://blog.csdn.NET/u011443509/article/details/52025019 上一篇文章里把SwipeRefreshLayout的原理简单过了一下&#xff0c;大致了解了其工作原理&#xff0c;不熟悉的可以去看一下&#xff1a;http://blog.csdn.net/u011443509/article/details/52017355…...

修改源码自定义SwipeRefreshLayout样式——高仿微信朋友圈下拉刷新

上一篇文章里把SwipeRefreshLayout的原理简单过了一下&#xff0c;大致了解了其工作原理&#xff0c;不熟悉的可以去看一下&#xff1a;http://blog.csdn.net/u011443509/article/details/52017355 上一篇里最后提到&#xff0c;SwipeRefreshLayout的可定制性是比较差的&#x…...

Android SwipeRefreshAndLoadLayout,下拉刷新,上拉更多,使用SwipeRefreshLayout自带的Progress

最近使用Google的SwipeRefreshLayout控件,感觉下拉的那个Progress很炫酷,效果很不错,就是没有上拉更多的效果,不开心....随后便在网上四处找,看看有没有哪位大神加上了,直接用. 结果不理想,基本都是监听列表滑动,然后手动做的,感觉不太好,然后就自己捣鼓了一下,只在SwipeRefres…...

linux下修改Mysql、Oracle以及mongoDB数据库密码

一、mysql &#xff08;1&#xff09;、知道原来的myql数据库的root密码&#xff1b; ①&#xff1a; 在终端命令行输入 mysqladmin -u root -p password "新密码" 回车 &#xff0c;Enter password: 【输入原来的旧密码】 ②&#xff1a; 登录mysql系统修改&#…...

Android 基于OpenGL ES2.0 的CircleProgressBar

之前想在播放器上加一个那种卡顿的转转提示&#xff1a; 类似&#xff1a; https://github.com/lsjwzh/MaterialLoadingProgressBar 这种效果的 由于当时没想到怎么在opengl es上实现&#xff0c;所以就没有做这个效果&#xff0c;后来有时间又去 研究了一下&#xff0c;好像这…...

Spring多数据源配置以及动态切换实现

Spring多数据源配置以及动态切换实现问题描述一&#xff1a;首先是配置数据源1、使用xml的bean节点来配置2、使用yml配置java代码实现配置二&#xff1a;动态数据源三&#xff1a;使用AOP切面实现动态数据源的切换问题描述 这篇文章主要是结合自己的经验&#xff0c;总结下多数…...

ThreadPoolExecutor线程池使用及参数详解

先贴一段实际应用代码&#xff0c;应用场景是一个基于http请求拦截的用户行为分析数据录入片段&#xff1a; package com.howbuy.coop.interceptor;import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.u…...

切换界面之后 SwipeRefreshLayout 动画效果暂停,以及不消失的解决方案

原因 因为SwipeRefreshLayout使用了一般动画animation 当界面隐藏后&#xff0c;动画即停止。 需要改为属性动画Animator 修改三个文件SwipeRefreshLayout、MaterialProgressDrawable、CircleImageView 修改后的SwipeRefreshLayout /** Copyright (C) 2013 The Android O…...

MaterialProgress等待框

package com.lock.zoomy.processdemo;import android.animation.ValueAnimator; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.animation.DecelerateInterpolator; import android.widget.ImageView;public c...

MaterialProgressDrawable v4包下圆形进度条

import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; import android.graphics....

Scalable privacy-preserving linking of multiple databases using counting Bloom filters论文总结

Scalable privacy-preserving linking of multiple databases using counting Bloom filters论文总结AbstractI. INTRODUCTIONII. RELATED WORKIII. DEFINITION AND PRELIMINARIESA. Protocol building blocksIV. CBF-BASED MP-PPRL ALGORITHMA. Extended secure summationB. I…...