简单分享下python多态

目录:

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

        二、基础的实例

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

        四、深入理解

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

多态(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.rhkb.cn/news/370611.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用算法优化广告效果

效果广告以超过67%的占比,成为了中国互联网广告预算的大头。在BAT、字节等大的媒体平台上,效果广告以CPC实时竞价广告为主。在这种广告产品的投放中,广告主或其代理公司通过针对每个广告点击出价,系统自动把这些点击出价换算成eCP…

【人工智能】-- 智能机器人

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉机器人介绍 🍈机器人硬件 🍍机械结构 🍍传感器 🍍控…

nginx配置尝试

from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, FileResponse, HTMLResponse import logging import os from datetime import datetime import uvicorn# 初始化日志 logging.basicConfig(filenamefile_server.lo…

学java的第3天 后端商城小程序工作

1.数据库的大坑 特殊字段名 ’我的图片表中有一个字段是描述我写成desc了,正好是mysql中的关键字 就不能使用了 2.后端编写 2.1可以把请求分开 在商品浏览页中 只显示商品的大致信息 当用户再点击其他按钮时在发出请求 2.2把请求合并 把数据整合到一起 利用ass…

SpringBoot环境集成 sms4j短信聚合

SpringBoot环境集成 sms4j短信聚合 官方文档 前言 在正式使用sms4j短信功能之前,请详细阅读本文档,依照本篇流程进行操作和配给,即可解决大部分问题,如对我们的文档有建议,请联系开发者团队, 我们将根据可…

电脑为什么会提示丢失msvcp140.dll?怎么修复msvcp140.dll文件会靠谱点

电脑为什么会提示丢失msvcp140.dll?其实只要你的msvcp140.dll文件一损坏,然而你的电脑程序需要运用到这个msvcp140.dll文件的时候,就回提示你丢失了msvcp140.dll文件!因为没有这个文件,你的很多程序都用不了的。今天我…

电脑录歌用什么软件好?分享电脑录音软件:6款

短视频普遍的今天,越来越多的人喜欢通过电脑进行音乐创作和录制。然而,面对市面上琳琅满目的电脑录音软件,很多人可能会感到困惑:电脑录歌用什么软件好呢?本文将为大家分享六款精选的录音软件,帮助大家找到…

【matlab】分类回归——智能优化算法优化径向基神经网络

目录 径向基(Radial Basis Function, RBF)神经网络 一、基本概念 二、网络结构 三、工作原理 四、学习算法 五、优点与应用 六、与BP神经网络的比较 智能优化算法 常见的智能优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO&#…

品牌推广的核心价值:作用解析与意义探讨!

在激烈的市场竞争环境之下,品牌推广已经成为企业不可缺少的一部分。不仅关乎企业的知名度,对市场份额更是起到了决定性的作用。 作为一名手工酸奶品牌的创始人,目前全国也复制了100多家门店,这篇文章,我将和大家分享品…

浪潮信息携手算力企业为华东产业集群布局提供高质量算力支撑

随着信息技术的飞速发展,算力已成为推动数字经济发展的核心力量。近日,浪潮信息与五家领先的算力运营公司在南京正式签署战略合作协议,共同加速华东地区智算基础设施布局,为区域经济发展注入新动力。 进击的算力 江苏持续加码智算…

【C语言】指针(1):入门理解篇

目录 一、内存和地址 1.1内存 1.2 深入理解计算机编址 二、指针变量和地址 2.1 取地址操作符(&) 2.2 指针变量和解应用操作符 2.2.1 指针变量 2.2.2 解引用操作符 2.3指针变量的大小 三、指针变量类型的意义 3.1 指针的解引用 3.1指针-整数…

2024 年 6 月区块链游戏研报:Pixels 引发 DAU 波动,行业用户留存率差异显著

作者:Stella L (stellafootprint.network) 数据来源:区块链游戏研究页面 2024 年 6 月,加密货币市场遭遇显著回调,比特币跌幅达 7.3%,以太坊更是下跌了 9.8%。此番波动不可避免地波及区块链游戏领域,导致…

C语言 do while 循环语句练习 中

练习: 4.编写代码,演示多个字符从两端移动,向中间汇聚 // 编写代码,演示多个字符从两端移动,向中间汇聚 //welcome to china!!! //w ! //we !! //wel !!! //.... //welco…

BufferReader/BufferWriter使用时出现的问题

项目场景: 在一个文件中有一些数据,需要读取出来并替换成其他字符再写回文件中,需要用Buffer流。 问题描述 文件中的数据丢失,并且在读取前就为空,读取不到数据。 问题代码: File f new File("D:\\…

Selenium的这些自动化测试技巧你知道几个?

Selenium自动化测试技巧 与以前瀑布式开发模式不同,现在软件测试人员具有使用自动化工具执行测试用例套件的优势,而以前,测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试,而是最大程度地减少…

Ubuntu24.04(22.04+版本通用)Miniconda与Isaacgym

1. ubuntu24.04安装minicondda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh解释下这段代码 bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3~/miniconda3/miniconda.sh: 指向Mi…

通信软件开发之业务知识:PON口割接什么意思?

一 PON口割接(原创总结) 在通信领域,PON口割接指的是对无源光网络(Passive Optical Network,PON)端口进行的切换或调整操作。简单来说,就是对光纤网络中的某个端口进行重新连接或重新分配&…

最近你悟出来什么道理?

点击上方△腾阳 关注 转载请联系授权 大家伙,我是腾阳。 活了近30年的我,终于领悟到,人生的旅途是一场深刻而复杂的自我发现与灵魂成长的壮丽征途。 这不仅仅是对外在世界的探索,更是内心深处的一场革命,是灵魂从懵…

11.x86游戏实战-汇编指令add sub inc dec

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:10.x86游戏实战-汇编指令lea 首先双击下图红框位置 然后在下图红框位置输入0 然…

G2.【C语言】EasyX绘制颜色窗口

1.窗口 窗口&#xff1a;宽度*高度&#xff08;单位都是像素&#xff09; #include <stdio.h> #include <easyx.h> int main() {initgraph(640, 480);getchar();return 0; } 640是宽&#xff0c;480是高 2.操作窗口的三个按钮 #include <stdio.h> #incl…