亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 数据类:现代语法下的数据管理利器

Python 数据类:现代语法下的数据管理利器

Python 数据类是加了 @dataclass 装饰器的普通类,专为存数据而生。Python 3.7+ 通过内置 dataclasses 模块提供。相较普通类有多项优势,本文逐一拆解并附示例与常用操作。

目录

数据类优势

极简代码量

@dataclass 装饰器零可见代码注入大量功能:自动生成 __init__、__repr__、__eq__ 等。只需声明字段,无需手写任何方法。

开箱即用的比较

两数据类实例可直接用 == 比较,因自动实现 __eq__。凡实现此魔术方法的对象均可同类型比较。

友好打印

自动实现 __repr__,print 直接输出结构化表示,调试极便利。

强制类型注解

数据类建立在 Python 新类型系统之上。类型提示降低 Bug 与意外行为。本质是声明变量应存何种类型数据。

数据类示例

from dataclasses import dataclass
@dataclass
class Card:
    rank: str
    suit: str
card1 = Card("Q", "hearts")
card2 = Card("Q", "hearts")
print(card1 == card2)  # True
print(card1.rank)      # 'Q'
print(card1)           # Card(rank='Q', suit='hearts')

默认值

数据类字段可设默认值,像赋值变量一样简单。令 Card 默认为红桃 Q:

from dataclasses import dataclass
@dataclass
class Card:
    rank: str = 'Q'
    suit: str = 'hearts'

数据类转 JSON

常见需求:导出数据类为 JSON(入库/发前端)。坏消息:标准库无直转方法。好消息:dataclasses-json 包一键解决,需额外装饰器。装包:

$ pip install dataclasses-json

用法示例:

from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Card:
    rank: str = 'Q'
    suit: str = 'hearts'
card = Card()
print(card.to_json())
{"rank": "Q", "suit": "hearts"}

另一种路子:继承 JSONEncoder 写自定义编码器,无需外部依赖。详见拙作《如何在 Python 中返回多个值》。

持续学习

Python

  1. 数据中心整合:降本、增安、提效
  2. C++数据抽象实战:接口与实现分离的设计艺术
  3. C++数据封装:守护代码安全的核心机制
  4. 精通Python数据类型:实战指南
  5. 精通Python类型转换与强制转换:综合指南
  6. 精通Python运算符:全面指南
  7. 精通 Python 自定义异常:实战指南
  8. 精通 Python 面向对象编程:类、继承、封装与多态
  9. 精通 Python 继承:概念、语法与实战示例
  10. 理解 Python type() 与 isinstance():实战示例详解
  11. Python 面向对象编程完全指南:从基础到进阶
  12. Java 经典数据结构:Vector、Stack、Hashtable 等遗留类详解