元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
Python基础语法
Python环境安装与配置
第一个Python程序
变量与数据类型
字面量详解
基本运算符
流程控制语句
包管理与虚拟环境
▶
Python数据结构
列表(List)详解
元组(Tuple)使用指南
字典(Dict)完全解析
集合(Set)操作大全
▶
函数与模块
函数定义与参数传递
Lambda表达式
模块导入与使用
常用内置函数
▶
面向对象编程
类与对象
继承与多态
魔术方法解析
装饰器原理与应用
▶
Python类型系统
类型注解(Type Hints)
Pydantic基础
Pydantic高级特性
typing模块基础
泛型类型详解
泛型类详解
Callable类型详解
Awaitable类型详解
类型变量与约束
类型别名与Protocol
TypedDict详解
Annotated类型
Reducer类型
类型检查工具使用
类型注解最佳实践
▶
关键字
pass关键字
raise关键字
global关键字
nonlocal关键字
yield关键字
assert关键字
with关键字
async/await关键字
▶
包管理
pip包管理基础
虚拟环境管理
包管理工具对比
requirements.txt规范
依赖管理与requirements.txt
setup.py配置说明
Poetry项目管理工具
Conda包管理系统
打包与发布Python包
PyPI发布流程
私有PyPI仓库
▶
Python高级特性
迭代器与生成器
多线程编程
协程与异步IO
元编程入门
反射机制详解
描述符协议
上下文管理器协议
垃圾回收机制
内存管理深度解析
性能优化指南
▶
文件与异常处理
文件读写操作
JSON数据解析
异常处理机制
上下文管理器
发布时间:
2025-03-29 21:33
↑
☰
# Python泛型类详解 ## 什么是泛型类? 泛型类是一种可以接受类型参数的类,它允许我们编写可以处理不同类型数据的通用类实现。通过使用泛型类,我们可以在保持类型安全的同时实现代码复用。 ## 创建泛型类 在Python中,我们使用`typing.Generic`和`TypeVar`来创建泛型类。以下是一个基本示例: ```python from typing import TypeVar, Generic T = TypeVar('T') class Stack(Generic[T]): def __init__(self) -> None: self.items: list[T] = [] def push(self, item: T) -> None: self.items.append(item) def pop(self) -> T: if not self.items: raise IndexError("Stack is empty") return self.items.pop() def peek(self) -> T: if not self.items: raise IndexError("Stack is empty") return self.items[-1] def is_empty(self) -> bool: return len(self.items) == 0 ``` ## 使用泛型类 创建泛型类的实例时,我们可以指定具体的类型: ```python # 创建一个整数栈 int_stack = Stack[int]() int_stack.push(1) int_stack.push(2) print(int_stack.pop()) # 输出: 2 # 创建一个字符串栈 str_stack = Stack[str]() str_stack.push("hello") str_stack.push("world") print(str_stack.pop()) # 输出: "world" ``` ## 多类型参数泛型类 泛型类可以接受多个类型参数: ```python from typing import TypeVar, Generic K = TypeVar('K') V = TypeVar('V') class Pair(Generic[K, V]): def __init__(self, key: K, value: V) -> None: self.key = key self.value = value def get_key(self) -> K: return self.key def get_value(self) -> V: return self.value def set_value(self, value: V) -> None: self.value = value # 使用示例 pair = Pair[str, int]("age", 25) print(pair.get_key()) # 输出: "age" print(pair.get_value()) # 输出: 25 ``` ## 泛型类型约束 我们可以对类型参数添加约束,限制可用的类型: ```python from typing import TypeVar, Generic, Comparable T = TypeVar('T', bound=Comparable) class SortedList(Generic[T]): def __init__(self) -> None: self.items: list[T] = [] def add(self, item: T) -> None: self.items.append(item) self.items.sort() def get_all(self) -> list[T]: return self.items # 使用示例 numbers = SortedList[int]() numbers.add(3) numbers.add(1) numbers.add(2) print(numbers.get_all()) # 输出: [1, 2, 3] ``` ## 泛型类的继承 泛型类可以继承其他泛型类: ```python from typing import TypeVar, Generic T = TypeVar('T') class Container(Generic[T]): def __init__(self, item: T) -> None: self.item = item def get_item(self) -> T: return self.item class NamedContainer(Container[T]): def __init__(self, name: str, item: T) -> None: super().__init__(item) self.name = name def get_name(self) -> str: return self.name # 使用示例 named_container = NamedContainer[int]("numbers", 42) print(named_container.get_name()) # 输出: "numbers" print(named_container.get_item()) # 输出: 42 ``` ## 最佳实践 1. 使用有意义的类型变量名称,如`Key`、`Value`、`T`等。 2. 为泛型类添加类型注解,提高代码可读性。 3. 合理使用类型约束,确保类型安全。 4. 在文档中清晰说明类型参数的用途。 5. 避免过度使用泛型,只在真正需要类型参数化的场景使用。 ## 总结 泛型类是Python类型系统中的重要特性,它能够帮助我们编写更加灵活、可复用的代码,同时保持类型安全。通过合理使用泛型类,我们可以提高代码质量和开发效率。