免费带你走进Python中的数据类
发布时间:2021-06-04 20:29:26 所属栏目:大数据 来源:互联网
导读:创建第一个数据类 创建一个数据类,该数据类表示三维坐标系中的一个点。 @dataclass装饰器用于创建数据类。x,y和z是数据类中的字段。注意要使用类型注释来指定字段的数据类型,但是类型注释不是静态类型声明,这意味着仍然可以为x,y或z字段传递除int之外的
创建第一个数据类
创建一个数据类,该数据类表示三维坐标系中的一个点。
@dataclass装饰器用于创建数据类。x,y和z是数据类中的字段。注意要使用类型注释来指定字段的数据类型,但是类型注释不是静态类型声明,这意味着仍然可以为x,y或z字段传递除int之外的任何数据类型。
from dataclasses import dataclass
@dataclass
classCoordinate:
x: int
y: int
z: int
默认情况下,数据类附带有init、repr和 eq方法,因此我们不必自己实现。但是如果init、repr和eq没有在Coordinate类中实现,有了数据类,我们仍然可以使用这些方法,这样非常节省时间。
from dataclasses import dataclass
@dataclass
classCoordinate:
x: int
y: int
z: int
a =Coordinate(4, 5, 3)
print(a) # output: Coordinate(x=4, y=5, z=3)
字段的默认值
编码者可以为字段分配默认值。如下所示,数据类中的pi字段被分配了默认值:
from dataclasses import dataclass
@dataclass
classCircleArea:
r: int
pi: float =3.14
@property
defarea(self):
return self.pi * (self.r **2)
a =CircleArea(2)
print(repr(a)) # output: CircleArea(r=2, pi=3.14)
print(a.area) # output: 12.56
自定义字段和数据类
设置dataclass装饰器或field函数的参数可以自定义字段和数据类。自定义过程将用例子进行说明,本文结尾也会给出字段和数据类的所有参数。
数据类可变还是不可变?
默认情况下,数据类是可变的,这意味着可以为字段分配值。但我们可以通过将frozen参数设置为True来使其不可变
可变示例:
from dataclasses import dataclass
@dataclass
classCircleArea:
r: int
pi: float =3.14
@property
defarea(self):
return self.pi * (self.r **2)
a =CircleArea(2)
a.r =5
print(repr(a)) # output: CircleArea(r=5, pi=3.14)
print(a.area) # output: 78.5
不可变示例:
设置frozen为 True,将无法再为字段分配值。在下面的示例中可以看到异常输出。
from dataclasses import dataclass
@dataclass(frozen=True)
classCircleArea:
r: int
pi: float =3.14
@property
defarea(self):
return self.pi * (self.r **2)
a =CircleArea(2)
a.r =5
# Exceptionoccurred: dataclasses.FrozenInstanceError:
# cannot assign tofield 'r'
![]() (编辑:阿坝站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |