Python 数据类

Dataclasses 是 Python 类,但更适合存储数据对象。 此模块提供了一个装饰器和函数,用于自动向用户定义的类添加生成的特殊方法,例如 __init__()__repr__()

特性

  1. 它们存储数据并代表某种数据类型。例如:一个数字。对于熟悉 ORM 的人来说,模型实例是一个数据对象。它代表特定类型的实体。它包含定义或表示该实体的属性。

  2. 它们可以与相同类型的其他对象进行比较。例如:一个数字可以大于、小于或等于另一个数字。

Python 3.7 提供了一个装饰器 dataclass,用于将类转换为数据类。

class Number:
    def __init__(self, val):
        self.val = val

obj = Number(2)
obj.val
2

使用数据类

# Dataclass: 自动生成 __init__ 和 __repr__ 方法
from dataclasses import dataclass

@dataclass  # 装饰器将类转换为数据类
class Number:
    val: int  # 必须提供类型注解

obj = Number(2)  # __init__ 自动创建
obj.val
2

默认值

可以轻松地为数据类的字段添加默认值。

# 带有默认值的数据类:带有默认值的字段必须放在没有默认值的字段之后
@dataclass
class Product:
    name: str        # 必需字段
    count: int = 0   # 带有默认值的可选字段
    price: float = 0.0  # 带有默认值的可选字段

obj = Product("Python")  # 只需要 name,其他使用默认值
obj.name
Python
obj.count
0
obj.price
0.0
测验

登录后即可答题并追踪学习进度

在数据类中,带有默认值的字段必须放在哪里?
A. 放在没有默认值的字段之前
B. 放在没有默认值的字段之后
C. 哪里都行
D. 在一个单独的部分

类型提示

在数据类中定义数据类型是强制性的。但是,如果您不想指定数据类型,请使用 typing.Any

from dataclasses import dataclass
from typing import Any

@dataclass
class WithoutExplicitTypes:
   name: Any
   value: Any = 42

相关链接