加入收藏 | 设为首页 | 会员中心 | 我要投稿 阿坝站长网 (https://www.0837zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

免费带你走进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' 

(编辑:阿坝站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读