Python中的“泛型”和“多重继承”

“泛型”和“多重继承”属于 Python 的语法规则。


1. 泛型(Generic[T])

通俗解释

  • 泛型允许你在定义类或函数时,不指定具体的类型,而是使用一个“占位符”(通常命名为 T)。
  • 这就像你制作一个盒子,但盒子里可以放任何东西,只要这个东西符合某个约束条件(例如必须是某个类的实例)。
  • 在使用这个类或函数的时候,你可以确定它返回的对象类型和传入的类型是一致的(这里说一致只是建议一致,因为这种检查主要是通过静态类型检查工具完成的,Python 在运行时不会自动强制这一点。),从而让代码更加安全、清晰。

数值举例说明

假设你定义了一个泛型类,它能包装任意数字(整数或浮点数),并且保证返回的值与输入的类型一致:

from typing import Generic, TypeVar# 定义一个类型变量 T,表示“数字”的类型(这里没有特别限制,但可以加约束)
T = TypeVar("T", int, float)class NumberBox(Generic[T]):def __init__(self, value: T):self.value = valuedef double(self) -> T:# 返回输入数字的两倍return self.value * 2# 创建一个包装整数的 NumberBox
int_box = NumberBox(5)
print(int_box.double())  # 输出 10# 创建一个包装浮点数的 NumberBox
float_box = NumberBox(3.5)
print(float_box.double())  # 输出 7.0

说明:

  • 当你用整数(如 5)创建 NumberBox 时,T 自动被推导为 int,所以 double() 方法返回整数 10。
  • 当你用浮点数(如 3.5)创建 NumberBox 时,T 自动被推导为 float,返回 7.0。
  • 泛型保证了无论你用哪种数字,方法返回的类型都和你包装时的一致。

泛型是 Python 中类型提示的一部分,主要通过 typing 模块中的 GenericTypeVar 实现。它们是 Python 的语法规则之一,特别在静态类型检查工具(如 mypy)中发挥作用。


2. 多重继承

通俗解释

  • 多重继承允许一个类同时继承自多个父类,从而同时获得各个父类的属性和方法。
  • 这就像一个孩子可以同时继承爸爸的优点和妈妈的特点,而不必只选择一个来源。

数值举例说明

假设你有两个类,一个负责存储数据格式验证,一个负责日志记录:

class DataValidator:def validate(self, data):# 简单验证,假设数据必须大于 0if data > 0:return Truereturn Falseclass Logger:def log(self, message):print(f"Log: {message}")# 多重继承:同时继承 DataValidator 和 Logger
class DataProcessor(DataValidator, Logger):def process(self, data):if self.validate(data):self.log(f"Processing data: {data}")return data * 2else:self.log("Invalid data!")return None# 使用示例
processor = DataProcessor()
result = processor.process(10)  # 有效数据
print(result)  # 输出 20result = processor.process(-5)  # 无效数据
print(result)  # 输出 None

说明:

  • DataProcessor 同时继承了 DataValidator(数据验证)和 Logger(日志记录),因此它可以同时调用 validate()log() 方法。
  • 数值例子中,我们处理数字 10 和 -5,前者经过验证后返回 20,而后者因为验证失败返回 None

多重继承是 Python 的核心语法之一。Python 允许一个类在定义时写上多个父类,比如 class MyClass(A, B, C):。这使得你可以组合多个类的功能,但也需要注意方法解析顺序(MRO)的问题。


总结

  • 泛型(Generic[T])

    • 让类或函数在使用时保持类型一致性(例如上面 NumberBox 的例子)。
    • 属于 Python 类型提示系统的一部分,是 Python 的语法规则之一。
  • 多重继承

    • 允许一个类同时继承多个父类,从而获得多方面的功能(例如 DataProcessor 同时继承 DataValidator 和 Logger)。
    • 是 Python 核心语法的一部分,也是 Python 中常用的面向对象编程特性。

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

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

相关文章

Typora 使用教程(标题,段落,字体,列表,区块,代码,脚注,插入图片,表格,目录)

标题 一个#是一级标题, 2个#是二级标题, 以此类推, 最多可达六级标题 示例 输入#号和标题后回车即可 注意: #和标题内容之间需要存在空格(一个或多个均可), 没有空格就会变成普通文字 标题快捷键 Ctrl数字 1-6 可以快速调成对应级别的标题 (选中文本/把光标放在标题上再按…

关于deepseek R1模型分布式推理效率分析

1、引言 DeepSeek R1 采用了混合专家(Mixture of Experts,MoE)架构,包含多个专家子网络,并通过一个门控机制动态地激活最相关的专家来处理特定的任务 。DeepSeek R1 总共有 6710 亿个参数,但在每个前向传播…

力扣hot100二刷——二叉树

第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路,编程也很流利⭐⭐Basically 基本掌握需要稍作思考,或者看到提示方法后能解答⭐⭐⭐Sl…

网络安全 --- 基于网络安全的 Linux 最敏感目录及文件利用指南

目录 基于网络安全的 Linux 最敏感目录及文件利用指南 Linux 中最敏感的目录及文件 1. /etc 2. /root 3. /var/log 4. /proc 5. /tmp 6. /home 7. /boot 8. /dev 如何利用这些敏感文件 你可能没想到的知识点 总结 Linux 中最敏感的目录及文件 1. /etc 存放内容&a…

深入浅出:Java实现斐波那契数列的七种武器与性能调优指南

​​​ 引言:当数学之美邂逅算法之力 斐波那契数列——这个诞生于13世纪的数学瑰宝,在计算机科学中焕发出新的生命力。作为递归与动态规划的经典案例,它不仅是算法入门的必修课,更是性能优化的试金石。本文将带您深入探索Java实现斐波那契数列的七种核心方法,并揭秘不同…

音视频入门基础:RTP专题(17)——音频的SDP媒体描述

一、引言 在《音视频入门基础:RTP专题(3)——SDP简介》中对SDP协议进行了简介,以H.264为例介绍了视频的SDP的媒体描述。本文对该文章进行补充,以AAC为例,讲述音频的SDP媒体描述。 二、文档下载 《RFC 364…

MyBatis-Plus防全表更新与删除插件BlockAttackInnerInterceptor

防全表更新与删除插件 BlockAttackInnerInterceptor 是 MyBatis-Plus 框架提供的一个安全插件,专门用于防止恶意的全表更新和删除操作。该插件通过拦截 update 和 delete 语句,确保这些操作不会无意中影响到整个数据表,从而保护数据的完整性…

嵌入式开发之STM32学习笔记day06

基于STM32F103C8T6的开发实践——从入门到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器,广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款,凭借其强大的性能、丰富的外设接口和低廉的价格…

TCP/IP 协议精讲-精华总结版本

序言 本文旨在介绍一下TCP/IP涉及得所有基础知识,为大家从宏观上俯瞰TCP/IP提供一个基石,文档属于《TCP/IP图解(第五版)》的精简版本。 专业术语 缩写 全称 WAN Wide area network广域网 LAN Local area network局域网 TC…

Ubuntu22.04虚拟机里安装Yolov8流程

1. 安装pytorch sudo apt install nvidia-cuda-toolkit nvcc --version # 官方适配地址:https://download.pytorch.org/whl/torch/import torch print(torch.__version__) print(torch.cuda.is_available())2. 安装环境 # cuDNN 安装:https://develop…

stm32第五天按键的基础知识

一:按键连接示意图 按键控制LED灯 软件设计流程 初始化系统 o 初始化GPIO外设时钟 o 初始化按键和LED的引脚 • 检测按键输入电平来控制LED灯 o SW2控制灯开 。 SW3控制灯关 1:key.c工程 #include"key.h" #include"stm32f10x.h"v…

Xposed模块开发:运行时修改技术

1. Xposed框架核心原理 1.1 运行时架构解析 Android ART Hook机制: graph TD A[目标APP进程] --> B{系统Zygote} B -->|加载Xposed| C[XposedBridge] C --> D[模块1] C --> E[模块2] D --> F[Hook目标方法] E --> F 1.1.1 核心组件交…

【Python学习笔记】一些关于多线程,xls文件读取,PyQt5,PyInstaller打包等问题的解决方案记录

背景: 最近利用休息时间写了个小型exe程序,主要涉及的技术点有:多线程,读取xls文件,基于PyQt5的简单GUI页面,利用PyInstaller打包成exe。虽然有ChatGPT等协助,但难免还是在开发过程中遇到了一些…

基于javaweb的SpringBoot智能相册管理系统图片相册系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

【AI知识管理系统】(一)AI知识库工具测评

嘿,朋友们!🧐你们有没有想过,咱们平日里那些一闪而过的知识笔记、各种碎片化的idea,记录下来之后都是怎么管理的呀? 还有啊,咱们读过的那些书,大家会不会随手写点东西记录一下呢?📝要知道,如果不写的话,很可能过不了多久就全忘得一干二净啦。 😭那多年前记下的…

JVM并发编程AQSsync锁ReentrantLock线程池ThreadLocal

并发编程2 synchronized锁实现**AQS****ReentrantLock实现****JUC 常用类**池的概念 ThreadLocalThreadLocal原理内存泄露强引用:软引用弱引用虚引用ThreadLocal内存泄露 synchronized锁实现 synchronized是一个关键字,实现同步,还需要我们提供一个同步锁对象,记录锁状态,记录…

C++从入门到入土(八)——多态的原理

目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中,我们介绍了C三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将…

自带多个接口,完全免费使用!

做自媒体的小伙伴们,是不是经常为语音转文字的事儿头疼? 今天给大家推荐一款超实用的语音转文字软件——AsrTools,它绝对是你的得力助手! AsrTools 免费的语音转文字软件 这款软件特别贴心,完全免费,而且操…

国内首款载重1吨级无人运输机TP1000首飞成功 2026年投入应急救援

大湾区经济网珠海快讯,据央视新闻报道,3月15日上午,国内首款载重1吨级大型无人运输机TP1000在山东成功首飞。该机由中国民航适航标准完全自主研发,起飞重量3.3吨,满载航程达1000公里,具备智能空投功能&…

设计模式Python版 访问者模式

文章目录 前言一、访问者模式二、访问者模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间的组…