Python 中的数据类 (dataclasses)
dataclasses 是 Python 标准库中从 3.7 版本开始新增的一个模块。它定义了 @dataclass 装饰器,该装饰器会自动为用户定义的类生成构造函数魔法方法 __init__()、字符串表示方法 __repr__()、重载 == 运算符的 __eq__() 方法(以及其他一些方法)。
dataclass 装饰器具有以下签名
dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
所有参数都采用布尔值,指示是否自动生成相应魔法方法。
“init” 参数默认为 True。它将自动为类生成 __init__() 方法。
让我们使用 dataclass 装饰器定义 Student 类,如下所示
from dataclasses import dataclass @dataclass class Student(object): name : str age : int percent : float
自动生成的 __init__() 方法类似于
def __init__(self, name: str, age: int, percent: float): self.name = name self.age = age self.percent = percent
如果类显式定义了 __init__() 方法,则忽略 init 参数。
repr 参数也默认为 true。因此,__repr__() 方法将自动生成。__repr__() 是对象的正式字符串表示形式。如果类已定义 __repr__(),则忽略此参数。
eq 参数默认为 true。这将自动生成 __eq__() 方法。此方法在响应等于比较运算符 (==) 时被调用。同样,如果类已定义 __eq__(),则忽略此参数。
如果 “order” 参数为 true(默认值为 False),则将自动生成用于比较的魔法方法 __lt__()、__le__()、__gt__() 和 __ge__() 方法,它们分别实现比较运算符 < <= > 和 >=。如果 order 为 true 且 eq 为 false,则会引发 ValueError。如果类已定义任何这些方法,则会导致 TypeError。
unsafe_hash 参数如果为 False(默认值),则根据 eq 和 frozen 的设置生成 __hash__() 方法。
frozen 参数:如果为 true(默认为 False),则模拟只读冻结实例。
>>> from data_class import Student
>>> s1=Student('Naveen', 21, 50.50)
>>> s2=Student('Mangesh', 20, 50.00)
>>> s1==s2
Falseasdict()
此函数将类实例转换为字典对象。
>>> import dataclasses
>>> dataclasses.asdict(s1)
{'name': 'Naveen', 'age': 21, 'percent': 50.5}astuple()
此函数将类实例转换为元组对象。
>>> dataclasses.astuple(s2)
('Mahesh', 20, 50.0)make_dataclass()
此函数根据作为 fields 参数给出的元组列表创建新的 dataclass。
>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)])
>>> n = NewClass(10,20)
>>> n
NewClass(x=10, y=20)
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP