您现在的位置是:网站首页 > 博客日记 >

Python_dataclass模块

作者:YXN-python 阅读量:6 发布日期:2025-06-12

dataclass 作为标准库中的一个模块,从 Python 3.7 开始引入。随着 Python 版本的不断更新,dataclass 逐渐发展和完善,为开发者提供了一种更便捷的方式来创建和管理数据类。

dataclass 非常适合创建主要用于存储数据的类,可以显著减少样板代码,同时保持代码清晰可读。

from dataclasses import dataclass, field, astuple, asdict
from typing import List


@dataclass(
    # frozen=True,  # 冻结数据类,防止被修改(只读)
    # order=True,  # 按照定义顺序排序
)
class Person:
    name: str
    userid: int = None  # 设置默认值
    username: str = None
    password: str = field(default="123", repr=False)  # 不在repr中显示,即隐藏敏感信息
    label: List[str] = field(default_factory=lambda: ['mankind'])  # default_factory 指定一个函数来生成默认值

    # 在 __init__ 后自动调用
    def __post_init__(self):
        self.label.extend(['handsome', 'generous'])


if __name__ == "__main__":
    coin_trans = Person("码海拾贝")
    print(coin_trans)  # Person(name='码海拾贝', userid=None, username=None, label=['mankind', 'handsome', 'generous'])
    # 访问属性
    print(coin_trans.name)  # 码海拾贝
    # 转为元组
    print(astuple(coin_trans))  # ('码海拾贝', None, None, '123', ['mankind', 'handsome', 'generous'])
    # 转为字典
    print(asdict(coin_trans))  # {'name': '码海拾贝', 'userid': None, 'username': None, 'password': '123', 'label': ['mankind', 'handsome', 'generous']}

 

YXN-python

2025-06-12