None

编写高效的 Python 数据类可以减少样板代码,同时保持代码整洁。本文将教您如何操作。

来源:KDnuggets

简介

标准 Python 对象将属性存储在实例字典中。除非您手动实现散列,否则它们不可散列,并且默认情况下它们会比较所有属性。此默认行为是合理的,但对于创建许多实例或需要对象作为缓存键的应用程序来说并未优化。

数据类通过配置而不是自定义代码来解决这些限制。您可以使用参数来更改实例的行为方式以及它们使用的内存量。字段级设置还允许您从比较中排除属性、定义可变值的安全默认值或控制初始化的工作方式。

本文重点介绍在不增加复杂性的情况下提高效率和可维护性的关键数据类功能。

您可以在 GitHub 上找到代码。

1. 冻结数据类以实现可散列性和安全性

使数据类不可变提供了可散列性。这允许您使用实例作为字典键或将它们存储在集合中,如下所示:

从数据类导入数据类

@dataclass(冻结=真)

类缓存键:

用户 ID:int

资源类型:str

时间戳:整数

缓存={}key = CacheKey(user_id=42,resource_type=“个人资料”,时间戳=1698345600)缓存[key] = {"data": "expense_computation_result"}freeze=True 参数使所有字段在初始化后不可变,并自动实现 __hash__()。如果没有它,您在尝试使用实例作为字典键时会遇到类型错误。此模式对于构建缓存层、重复数据删除逻辑或任何需要可哈希类型的数据结构至关重要。不变性还可以防止状态被意外修改的整个类别的错误。2. 提高内存效率的插槽当您实例化数千个对象时,内存开销会迅速增加。这是一个示例:从数据类导入数据类@dataclass(槽=True)类测量:传感器 ID:整数温度:浮动湿度:浮动输出:结论