讲师中心 微信公众号
AI工具推荐 视频效率加速

Python 中基于 TypedDict 的构造函数参数过滤与继承实现

大辰姑娘_6293

大辰姑娘_6293

发布时间:2026-02-15 16:20:13

|

864人浏览过

|

来源于php中文网

原创

Python 中基于 TypedDict 的构造函数参数过滤与继承实现

本文介绍如何通过基类继承机制,复用 TypedDict 类型约束下的 **kwargs 过滤逻辑,使多个子类能各自适配不同的 TypedDict 结构,同时保持类型安全与运行时健壮性。

本文介绍如何通过基类继承机制,复用 typeddict 类型约束下的 `**kwargs` 过滤逻辑,使多个子类能各自适配不同的 `typeddict` 结构,同时保持类型安全与运行时健壮性。

在 Python 类型驱动开发中,TypedDict 是表达结构化字典契约的首选方式;而当多个类需以 **kwargs 接收并仅保留其对应 TypedDict 所定义字段时,重复编写相似的过滤逻辑不仅冗余,更易引入维护风险。理想方案是提取共性——将参数校验、过滤与格式化解耦,并通过继承实现类型特化。

以下是一个专业、可扩展的实现:

from typing import TypedDict, Union, Unpack, Dict, Any

class TypeFilter1(TypedDict):
    c: str
    d: float

class TypeFilter2(TypedDict):
    e: float
    f: int

# 支持 N 个 TypedDict 的通用基类
class BaseClass:
    # 子类必须覆写此属性,指向对应 TypedDict 的 __annotations__
    _allowed_keys: Dict[str, Any] = {}

    def __init__(self, **kwargs: Union[Unpack[TypeFilter1], Unpack[TypeFilter2]]) -> None:
        filtered = self._filter_kwargs(kwargs)
        self.filters = [f"{k}:{v}" for k, v in filtered.items()]
        self.params = " ".join(self.filters)

    def _filter_kwargs(self, kwargs: Dict[str, Any]) -> Dict[str, Any]:
        """根据 _allowed_keys 保留合法键值对,忽略未知字段(静默丢弃)"""
        return {k: v for k, v in kwargs.items() if k in self._allowed_keys}

子类只需声明对应的 TypedDict.__annotations__ 即可完成适配:

class MyClass1(BaseClass):
    _allowed_keys = TypeFilter1.__annotations__

class MyClass2(BaseClass):
    _allowed_keys = TypeFilter2.__annotations__

✅ 使用示例:

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载

立即学习“Python免费学习笔记(深入)”;

a = MyClass1(c="hello", d=2.0)      # params → "c:hello d:2.0"
b = MyClass2(e=2.1, g=3, f=42)     # params → "e:2.1 f:42"(g 被自动忽略)

? 关键设计说明:

  • **kwargs: Union[Unpack[TypeFilter1], Unpack[TypeFilter2]] 是类型提示层面的“宽泛接受”,允许 IDE 和类型检查器(如 mypy)识别所有合法字段;实际过滤由运行时 _allowed_keys 控制,兼顾类型安全与灵活性。
  • _allowed_keys 使用 Dict[str, Any] 类型而非 dict,确保类型检查器能正确推导键存在性(避免 key not in dict 的误报)。
  • _filter_kwargs 采用字典推导式,简洁高效;若需更严格的校验(如类型匹配或缺失必填项报错),可在此处增强逻辑(例如调用 isinstance(v, _allowed_keys[k]) 或集成 pydantic 验证)。

⚠️ 注意事项:

  • TypedDict.__annotations__ 在运行时始终可用(即使 TypedDict 定义为空),但需确保子类显式赋值,不可依赖继承默认值(否则过滤失效);建议添加 @classmethod 检查或 __init_subclass__ 自动注册。
  • 若未来需支持动态 TypedDict(如泛型化),可结合 TypeVar + Generic[T],但当前 CPython 对 Unpack[T] 的泛型推导仍有限制,推荐优先采用上述静态注册模式。
  • 此模式天然支持任意数量的 TypedDict 变体:新增 TypeFilterN 后,仅需定义新子类并指定 _allowed_keys,零侵入扩展。

总结而言,该方案以「类型提示宽进、运行时严出」为原则,在不牺牲静态类型能力的前提下,实现了高内聚、低耦合的构造函数复用,是构建配置驱动型类库(如数据过滤器、API 请求封装器等)的稳健实践。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
c语言union的用法
c语言union的用法

c语言union的用法是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型,union的使用可以帮助我们节省内存空间,并且可以方便地在不同的数据类型之间进行转换。使用union时需要注意对应的成员是有效的,并且只能同时访问一个成员。本专题为大家提供union相关的文章、下载、课程内容,供大家免费下载体验。

809

2023.09.27

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

391

2026.03.13

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

0

2026.11.04

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

0

2026.11.03

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn