数据类是自3.7版以来在Python标准库中添加的新模块。它定义了@dataclass装饰器,该装饰器自动生成构造函数魔术方法__init __(),字符串表示方法__repr __()和__eq __()方法,该方法为用户定义的类重载==运算符(以及更多)。
数据类装饰器具有以下签名
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 __()方法,它们实现比较运算符<<= > ans> =分别。如果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 False
此函数将类实例转换为字典对象。
>>> import dataclasses >>> dataclasses.asdict(s1) {'name': 'Naveen', 'age': 21, 'percent': 50.5}
该函数将类实例转换为元组对象。
>>> dataclasses.astuple(s2) ('Mahesh', 20, 50.0)
此函数从作为fields参数给出的元组列表中创建一个新的数据类。
>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)]) >>> n = NewClass(10,20) >>> n NewClass(x=10, y=20)