Python中的数据类(数据类)

数据类是自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

asdict()

此函数将类实例转换为字典对象。

>>> import dataclasses
>>> dataclasses.asdict(s1)
{'name': 'Naveen', 'age': 21, 'percent': 50.5}

astuple()

该函数将类实例转换为元组对象。

>>> dataclasses.astuple(s2)
('Mahesh', 20, 50.0)

make_dataclass()

此函数从作为fields参数给出的元组列表中创建一个新的数据类。

>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)])
>>> n = NewClass(10,20)
>>> n
NewClass(x=10, y=20)