python中 dataclass使用

dataclass

在 Python 中,dataclass 是一种简化创建数据类的方式,提供了自动生成的初始化方法 (__init__)、表示方法 (__repr__)、比较方法 (__eq__) 等。dataclass 可以减少手动编写这些方法的繁琐代码。下面是 dataclass 的一些基本用法:

1. 基本用法

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int

在这个示例中,Person 是一个数据类,nameage 是它的属性。使用 dataclass 后,Python 会自动生成 __init____repr__ 等方法,所以可以直接创建实例:

p = Person(name="Alice", age=30)
print(p)  # 输出: Person(name='Alice', age=30)

2. 添加默认值

可以为属性添加默认值,或者使用 field 函数来指定默认值和选项。

from dataclasses import dataclass, field

@dataclass
class Person:
    name: str
    age: int = 18  # 设置默认年龄
    hobbies: list = field(default_factory=list)  # 使用工厂函数来生成默认值

上面代码中的 hobbies 属性使用了 default_factory 来指定默认值为空列表。这样做是为了避免多个实例共享同一个列表对象的问题。

3. 可变参数的 field

dataclass 中的 field 还可以设置其他选项,比如设置某个属性不参与比较或排除在初始化之外。

from dataclasses import dataclass, field

@dataclass
class Person:
    name: str
    age: int = 18
    _id: int = field(repr=False, compare=False)  # _id不会出现在repr和比较中

4. __post_init__ 方法

dataclass 允许在初始化后自定义逻辑,使用 __post_init__ 方法可以实现。例如,在初始化时做一些校验或处理。

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    
    def __post_init__(self):
        if self.age < 0:
            raise ValueError("年龄不能为负数")

5. 数据类的比较

默认情况下,dataclass 生成的类会包含 __eq____lt__ 等比较方法,这样可以直接比较两个数据类的实例。

dataclass(order=True)
class Person:
    name: str
    age: int

p1 = Person(name="Alice", age=30)
p2 = Person(name="Bob", age=25)
print(p1 > p2)  # 输出: True (因为p1的年龄大)

总结

dataclass 的优点在于简洁、直观和减少手动代码编写,尤其适合存储简单数据结构。

其它参考

https://www.cnblogs.com/wang_yb/p/18077397

posted @ 2024-11-13 10:19  __username  阅读(2)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。