简单分享下python多态

news2024/11/16 22:27:56

目录:

        一、多态是啥嘞(龙生九子各有不同,这就是多态)

        二、基础的实例

        三、多态的优势与应用场景

        四、深入理解

一、多态是啥嘞(龙生九子各有不同,这就是多态)

多态(Polymorphism),顾名思义,就是多种形态。

在面向对象编程(OOP)中,它指的是允许你使用一个接口来表示不同的类型的能力。简单来说,就是同一种行为可以根据发送消息的对象的不同而采用不同的行为方式。

比如,动物园里有各种动物,它们都有“叫”的能力,但是每种动物叫的方式不同。狗会“汪汪”,猫会“喵喵”。如果我们设计一个“动物”类,并让每种动物都继承这个类,然后定义一个“叫”的方法,就能实现多态。

在Python这样的动态语言中,多态的实现尤为自然和灵活,因为Python是基于“鸭子类型”(Duck Typing)的,关注的是“是不是能做某事”,而不是“是什么”。

二、基础的实例

# 定义一个基础的动物类
class Animal:
    def speak(self):
        pass

# 狗类继承动物类,重写speak方法
class Dog(Animal):
    def speak(self):
        return "汪汪"

# 猫类同样继承动物类,重写speak方法
class Cat(Animal):
    def speak(self):
        return "喵喵"

def animal_sound(animal):
    # 不管传入什么动物,只要它能speak就行
    print(animal.speak())

# 实例化并调用
dog = Dog()
cat = Cat()

animal_sound(dog)  # 输出: 汪汪
animal_sound(cat)  # 输出: 喵喵

在这个例子中,animal_sound函数并不关心是什么类型的动物,什么动物都有叫的能力,只要它有一个speak方法就可以。这就是多态的魅力,每个动物都能发出他们不同的叫的动作——通过统一的接口来处理不同的对象类型。

三、多态的优势与应用场景

1、代码复用与扩展性:多态通过提供一个通用的交互界面,使得针对不同对象类型的操作能够集中处理,从而避免了为每个具体类型编写重复的控制逻辑。

在上述示例中,多态减少了代码重复,使得添加新的动物种类时,无需修改已有的函数,只需增加新的子类即可。

2、提高工作效率:在大型项目中,多态能够帮助我们快速定位和修改问题,减少因类型检查而导致的错误,使开发更加高效。

3、实际应用场景

  • GUI编程:按钮、文本框等控件都可能需要响应“点击”事件,尽管它们的行为细节不同,但都可以通过相同的接口来处理事件。

  • 数据处理框架:如Pandas库,无论是DataFrame还是Series,都可以通过.apply()方法应用自定义函数,这是多态在实际库中的体现。

  • Web框架:如Django的视图函数可以处理不同类型的请求,只要这些请求符合预期的接口规范。

四、深入理解

为了更好地利用多态,Python提供了abc模块,用于定义抽象基类(Abstract Base Class, ABC)。抽象基类不能被实例化,其目的是为子类提供一个必须实现的接口规范。

from abc import ABC, abstractmethod

class AbstractAnimal(ABC):
    @abstractmethod
    def speak(self):
        pass

# 如果不实现speak方法,Dog类将无法实例化
class Dog(AbstractAnimal):
    def speak(self):
        return "汪汪"

# 尝试实例化未实现speak的类会报错
# class SilentAnimal(AbstractAnimal):
#     pass

# animal = SilentAnimal()  # 这里会报TypeError

好啦啦啦,今天的分享就到这里了,有喜欢的哥哥姐姐们,欢迎大家留言指点^_^如果本文对你有帮助,请点赞、转发哦

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

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

相关文章

无人机森林火灾解决方案

森林火灾解决方案 森林火灾特点 森林火灾发生突然、蔓延迅速、难以控制,应对难度系 数很高,扑救工作十分困难 救援面临的挑战 • 林区交通不便, 山高坡陡, 沟壑纵横,难以及时侦查、 定位、扑灭 • 火灾发生的区域…

Unity休闲手机游戏开发课程

课程介绍 Unity休闲手机游戏开发课程将教您如何利用Unity游戏引擎创建令人愉快的休闲手机游戏。从基础的游戏开发知识到高级的游戏制作技巧,您将学习到创建各种类型的休闲游戏所需的关键技能和工具。无论您是初学者还是有一定经验的开发者,本课程都能帮助…

centos更换yum源、安装Docker和换源

所有操作都是在root权限下做的,切换root用户 命令:su root 使用ls /etc/yum*查看所有的关于yum的文件的路径 先安装wget 命令:yum install wget -y 命令:cd /etc/yum.repos.d进去,以便于操作 我们需要配置的是Cen…

STM32 Cannot access memory

问题描述 最近自己做了一块STM32F103ZET6的板子,在焊接完成后可以在下载器界面看到idcode,但烧录时报错 Cannot access memory 。 解决办法 测量STM32各个供电项,发现时33脚处VDDA电压只有1.8V,是因为R3电阻过大,…

深入理解计算机系统 CSAPP 家庭作业8.19

假设n1 会打印 2行 hello 假设n2 会打印 4行 hello 假设n3 会打印 8行 hello 答案 2的n次方

2024年上半年网络工程师下午真题及答案解析

试题一(20分) 某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。两校区默认由本地…

天呐,iPhone16系列的电池居然能自己更换?

在智能手机的发展历程中,苹果公司一直以其独特的设计理念和创新技术引领着行业的潮流。然而,一体化机身设计中不可更换的电池一直是用户心中的痛点。iPhone16系列的推出,标志着苹果在电池设计上的一次重大突破,它不仅解决了用户的…

色彩搭配的艺术:打造和谐视觉体验的秘诀

当设计作品呈现给用户时首先映入眼帘的是视觉表达,色彩无疑是最关键的元素之一。色彩不仅是视觉艺术的一部分,也承载着情感文化甚至个人品味的多重含义。在设计领域,色彩设计可以极大地影响作品的整体感受和传达效果。那么什么是色彩设计&…

RabbitMQ 更改服务端口号

需求 windows环境下,将RabbitMQ默认的端口号 5672 改为 11001 实现 本机RabbitMQ版本为3.8.16,找到配置文件位置,路径为:C:\Users\%USERNAME%\AppData\Roaming\RabbitMQ\advanced.config 配置文件默认内容为空 填写修改端口号…

Python:Python基础知识(注释、命名、数据类型、运算符)

四、Python基础知识(注释、命名、数据类型、运算符) 1.注释 Python有两种注释方法:单行注释和多行注释。单行注释以#开头,多行注释以‘’‘开头和结尾。 2.命名规则 命名规则: 大小写字母、数字、下划线和汉字等字符及组合&am…

Alpha2:使用深度强化学习挖掘公式化的超额收益因子(附论文及源代码)

原创文章第577篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 今天说说因子挖掘,我们之前交付的Deap遗传算法因子挖掘,大家可以前往温习一下: 源码发布Quantlab4.2,Deap因子挖掘|gplearn做不到的…

基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型

背景 随着城市化进程的加速和房地产市场的快速发展,房价已成为经济学、社会学等多学科交叉研究的热点问题。为了更精确地分析和预测房价,数据分析和机器学习技术被广泛应用。在此背景下,开发一个基于Python Django的房价数据分析平台具有重要…

多维度多场景文档门户,鸿翼ECM文档云打造文档管理新范式

​在现代企业运营中,内容协作的效率直接影响到组织的整体表现和竞争力。传统的文档管理系统都是通过目录结构的方式进行文件管理,在实际业务中无法满足用户多视角、多维度、多场景的文档业务需求。因此,搭建结合文档体系的业务门户是许多企业…

计算机网络 | 期末复习

物理层: 奈氏准则:带宽(w Hz),在不考虑噪音的情况下,最大速率(2W)码元/秒 信噪比S/N:以分贝(dB)为度量单位。信噪比(dB)…

116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台

一、板卡概述 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器,用于存储程序。外扩 SATA、PCI、PCI expres…

Java | Leetcode Java题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; class Solution {int[][] dirs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};public List<String> findWords(char[][] board, String[] words) {Trie trie new Trie();for (String word : words) {trie.insert(word);}Set<String> a…

TYPE-C转DC转接头方案,ECP5701支持5V、9V、12V、15V、20V电压输出

如今随着这几年的USB-C PD适配器的普及&#xff0c;消费者手上的PD适配器越来越普遍&#xff0c;如何让以前的电源适配器也可以用上PD适配器呢&#xff1f;如此一来以前的电源适配器坏了&#xff0c;就不需要费心费力的寻找相同的适配器进行更换&#xff0c;甚至于只能将整个设…

初识单片机

单片机 英文 Micro Controller Unit&#xff08;MCU&#xff09; 1.内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能 2.单片机的任务是信息采集&#xff08;依靠传感器&#xff09;、处理&#xff08;依靠CPU&#xff09;和硬件设备&#…

爬虫笔记20——票星球抢票脚本的实现

以下内容仅供交流学习使用&#xff01;&#xff01;&#xff01; 思路分析 前面的爬虫笔记一步一步走过来我们的技术水平也有了较大的提升了&#xff0c;现在我们来进行一下票星球抢票实战项目&#xff0c;实现票星球的自动抢票。 我们打开票星球的移动端页面&#xff0c;分…

Keil用ST-LINK下载STM32程序后不自动运行

之后程序可以运行了&#xff0c;但是串口还没有输出&#xff0c;在debug模式下都是ok的。