📅  最后修改于: 2023-12-03 15:19:30.096000             🧑  作者: Mango
在Python 3.7中,加入了一项新的功能——数据类(data classes)。数据类能够帮助编写一些只有属性,没有方法的类,这样可以大大简化代码。
在数据类中,有多种字段(Field)可以使用,本文将介绍其中的三种:普通字段、默认字段和只读字段。
普通字段是数据类中最常用的字段。通过在类中定义属性,可以轻松地定义一个普通字段。例如:
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
这个数据类有两个普通字段:x
和y
,类型都是int
。
值得注意的是,在这个例子中并没有定义任何函数,这个数据类的所有方法(如__init__()
,__repr__()
等)都是由Python自动创建的。可以通过如下方式创建这个Point
类的对象:
p = Point(1, 2)
print(p.x, p.y) # 1 2
然后就可以轻松地访问这个数据类的字段。
除了普通字段,数据类还支持默认字段。为了创建默认字段,只需在类中定义一个属性,然后给它一个默认值即可。例如:
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
height: int
color: str = "white"
这个数据类有三个字段:width
,height
和color
。其中color
是默认字段,它的默认值是字符串white
。当创建这个Rectangle
类的实例时,可以在构造函数中传入width
和height
,如果不传入color
,则会自动使用默认值white
。例如:
r1 = Rectangle(10, 20)
r2 = Rectangle(10, 20, "red")
print(r1.color) # white
print(r2.color) # red
在这个例子中,r1
的颜色为white
,因为我们没有为它传入颜色参数。而r2
的颜色为red
,因为我们在创建它的时候传入了颜色参数。
最后一个数据类字段的类型是只读字段。只读字段是指其值在创建实例后就不能再更改了。要定义一个只读字段,需要在字段名前添加装饰器property
,然后编写获取函数。例如:
from dataclasses import dataclass
@dataclass
class ImmutableRectangle:
width: int
height: int
@property
def area(self) -> int:
return self.width * self.height
在这个例子中,我们定义了一个名为area
的只读字段,它的值由width
和height
属性计算得到。由于area
是只读字段,我们不能通过实例对象更改它的值。例如:
r = ImmutableRectangle(10, 20)
print(r.area) # 200
r.area = 100 # AttributeError: can't set attribute
在这个例子中,我们创建了一个只读字段area
,并且尝试更改它的值。由于area
是只读字段,当我们试图更改它的值时,会抛出一个AttributeError
异常。
本文介绍了Python中数据类中的三种字段类型:普通字段、默认字段和只读字段。它们可以帮助我们轻松地创建只有属性,没有方法的类,并且可以使代码更加简洁易懂。