Python进阶-----面对对象5.0(面对对象三大特征之--多态)

news2024/11/19 5:24:17

目录

前言:

多态

习题


前言:

        上一期讲了Python面对对象中的继承,而今天讲的是多态,其实多态跟继承是紧密相关的,换句话说多态是继承的一种表现形式,下面就一起来看看吧!(上一期链接Python进阶-----面对对象4.0(面对对象三大特征之--继承)_Python欧尼酱的博客-CSDN博客)

多态

        多态,多态,顾名思义就是多种形态,比如哈士奇和柯基生下的小狗崽既有柯基的小短腿,又有哈士奇黑白相间的毛色,这就是一种多态。在Python面对对象是这样子定义的:在继承的过程中,不同的对象,调用同一个方法,表现出不同的形式

 多态的要求:

1.必须有类的继承

2.子类必须重写父类的方法

示例1: 

class Cat(object):
    def sound(self):
        print('喵喵喵')
    def animal(self):
        print('猫咪')
class Dog(object):
    def souund(self):
        print('汪汪汪')
    def animal(self):
        print('小狗')
class A(Dog,Cat):
    def sound(self):
        print('呜呜呜')
class B(Cat,Dog):
    def sound(self):
        print('哇哇哇')
e1=A()
e2=B()
e1.sound()
e2.sound()
#输出结果:呜呜呜
#        哇哇哇

这就是多态的表现形式了,同样都是用sound() 方法,结果却截然不同,那是因为我定义的两个子类中重写的方法不同。

示例2:

class Old(object):
    def __init__(self,food,clothes):
        self.food=food
        self.clothes=clothes
    def fun(self):
        print('work')
class New(Old):
    def __init__(self,name,food,clothes):
        self.name=name #重写添加的属性
        Old.__init__(self,food,clothes) #在重写的时候获取保留父类的相关属性
    def fun(self):
        super().fun() #获取保留父类的方法
        print('work hard')   #重写的方法
a=New('伊丽莎白二世','皇家美食','裙子')
b=Old('好吃的','粉色的裙子')
print(a.name,a.clothes,a.food)
print(b.food,b.clothes)
New.fun(a)
Old.fun(b)
#输出结果:
# 伊丽莎白二世 裙子 皇家美食
# 好吃的 粉色的裙子
# work
# work hard
# work

习题

一、饭店点餐付款
    1、定义一个饭店类
    属性:名字 , 菜单 , 金额  余额
    方法:点餐 , 付款[取款需要判断余额是否足够]

    2、定义一个自己的饭店
    继承了饭店类中的所有属性以及方法

    3、定义一个某团
    这个某团继承了第一个饭店所有属性以及方法
     , 付款需要收取打包费 , 打包费5元。

先思考思考

答案:

class Restaurant(object):
    def __init__(self,name,money):
        self.rname='R面馆'
        self.name=name
        self.money=money
        self.menu={0:['红烧牛肉面',15],1:['过桥米线',14],2:['桂林米粉',13]}
    def showmenu(self):
        print('{} welcom to {}\n 菜单如下:'.format(self.name,self.rname))
        for key,value in self.menu.items():
            print(f'选项{key}--{value[0]}--价格:{value[1]}')

    def select(self):
        self.showmenu()
        p=int(input('choose in 0,1,2:'))
        if p in self.menu:
            self.pay(self.menu[p][1])
        else:
            print('选择错误,菜单上没有')
    def pay(self,money):
        if self.money>money:
            self.money-=money
            print(f'已支付{money}元,找回{self.money}元')
        else:
            print('钱不够')
class Myres(Restaurant):
    pass
class Meituan(Restaurant):
    def pay(self,money):
        money+=5
        if self.money>money:
            self.money-=money
            print(f'已支付{money}元,找回{self.money}元')
        else:
            print('钱不够,qiongb')
yourmoney=int(input('输入你带了多少钱:'))
user=Meituan('李信',yourmoney)
user.select()

 

好了,这一期就到这里了,我们下期见~

分享一张壁纸:

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

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

相关文章

性价比高的骨传导蓝牙耳机,推荐几款性能高的骨传导耳机

​骨传导耳机,顾名思义是一种声音传递方式,利用头骨作为震动传导发声。不像一般耳机那样通过外耳或内耳传递声音。声音由耳部传播到头后产生振动刺激颅脑内听觉中枢引起听觉。因此是一种非入耳式的声音传播方式。而在选购过程中,对于价格、功…

自动驾驶目标检测项目实战(二)—基于Faster-RCNN的交通标志检测

自动驾驶目标检测项目实战——基于Faster-RCNN的交通标志检测 目前目标检测算法有很多,流行的就有faster-rnn和yolov,本文使用了faster-rnn框架进行训练,效果还不错,准确率,当然也可以使用更高版本的Yolov进行实战。本…

RK3568触摸屏驱动调试总结

硬件电路分析 RK3568 CPU通过I2C与触控板外设wdt87xx连接。 首先要根据电路图获取如下I2C的信息: 项目Value接在哪个I2Ci2c1I2C 寄存器地址0x2cHID 地址0x20中断B5 1、接在哪个I2C 如图,1接在I2C1: 2、使用哪个GPIO引脚接收触控板的中断 如图&#xf…

Ubantu从0开始配置深度学习RTX 4090+3090显卡的服务器

文章目录1. 基础2. 用户访问3. Pytorch环境的问题4. 显卡调度问题方法一:在shell命令前强制指定显卡方法二:在代码中强制指定显卡5. 各种各样的小BUG5.1 Liunx创建新用户登录异常:/usr/bin/xauth: error/timeout in locking authority file /…

Unity之向量计算

文章目录前言向量加法向量减法向量乘法/除法向量点乘(内积)向量叉乘(外积)向量归一化向量小结前言 讲讲Unity中的向量有关知识,一些概念在初高中就学过,就不解释了。向量只能与自己相同维度进行计算&#…

Zookeeper3.5.7版本——选举机制(第一次启动时)

目录一、第一次启动服务时Zookeeper的选举机制1.1、服务器1启动1.2、服务器2启动1.3、服务器3启动1.4、服务器4启动1.5、服务器5启动二、Zookeeper中的一些概念了解2.1、SID2.2、ZXID2.3、Epoch一、第一次启动服务时Zookeeper的选举机制 1.1、服务器1启动 服务器1启动&#x…

嵌入式学习笔记——STM32硬件基础知识

STM32开发硬件知识前言STM32最小系统电源电路晶振电路复位电路BOOT选择电路调试接口电路其他电路本文重点本文参考博客链接前言 上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程,这都是解决的电脑端的开发环境问题,还没有到实际的开…

【数据结构】邻接矩阵和邻接图的遍历

写在前面 本篇文章开始学习数据结构的图的相关知识,涉及的基本概念还是很多的。本文的行文思路:学习图的基本概念学习图的存储结构——本文主要介绍邻接矩阵和邻接表对每种结构进行深度优先遍历和广度优先遍历先识概念话不多说,狠活献上学习思想等等&…

C++ Stack栈学习

1. stack的介绍和使用1.1 stack的介绍1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器&…

sync map思考

sync map 作为解决 map 并发读写问题的补充,用法上其实不复杂,有些惋惜的是,不支持 len 统计数量的方法。map 并发读写算得上一个非常严重的问题,会导致服务宕机,为了避免 map 的并发读写,一种解决办法是直…

华为机试题:HJ108 求最小公倍数(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

软件工程知识-软件测试

1、软件测试是发现软件错误(缺陷)的主要手段: 从是否关系软件内部结构和具体实现的角度对软件测试进行分类 2.静态测试:以检查为主(桌前检查、代码走查、代码审查) 动态测试:实际运行程序&am…

Leetcode刷题一

目录序言树「结构」「遍历」「经验」「跨父节点」「题型」序言 笔记根据labuladong进行总结,极力推荐labuladong算法进行学习!! 树 0、算法一开始就应该刷树,了解递归的思想。 1、C语言中定义了一个结构体,然后申明…

通过指针引用数组的几种方法的原理和差异;以及利用指针引用数组元素的技巧

关于地址,指针,指针变量可以参考这篇文章: 地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?_juechen333的博客-CSDN博客https://blog.csdn.n…

nginx http模块

模块依赖2. 模块的初始化2.1 location的定义location的定义包含以下几种location [ | ~ | ~* | ^~ ] uri { ... } location name { ... }:表示精确匹配,只有请求的url路径与后面的字符串完全相等时,才会命中,不支持location嵌套~&#xff1a…

有免费的PDF转Word吗?值得收藏的7个免费 PDF转Word工具请收好

PDF 和 DOC 是人们在工作中广泛使用的两种最流行的文档格式。PDF 是 Adobe 的便携式文档格式,DOC 是 Microsoft 的 Word 文档格式。PDF 是一种更安全可靠的文件格式,因为它很难编辑 PDF 文件,但是有一些称为 PDF 编辑器的工具可用于编辑 PDF …

【Linux】工具(4)——make/Makefile

本期博客我们的任务就是搞懂自动化构建工具——make/Makefile一、什么是make/Makefile📌make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make&…

设计模式之创建型模式

一、设计模式分类二、创建型模式1、单例模式1.1 饿汉式(静态变量)1.2 饿汉模式(静态代码块)1.3 懒汉式(线程不安全)1.4 懒汉式(线程安全,同步方法)1.5懒汉式(…

PHP语言

一、PHP简介 什么是 PHP? PHP 是强有力的服务器端脚本语言 PHP 是免费的,并且使用广泛 PHP能够包含文本、HTML、CSS以及PHP代码,在服务器上执行,结果以纯文本返回浏览器。PHP是从C和Perl发展而来的一种非常简单的语言&#xff…

考研流程,可以进来转一转(考研你不知道的事情)(详细版)

之前有听过好多人说要考研,那么,考研的信息,如何获取呢,考研都有哪些流程呢。 初试开始到考试:↓ 1、了解考研信息。 2、确定自己要报考的专业。(本专业or跨考) 3、选择地区 4、选择要报考的学…