📜  Python中的数据类 |设置 3(数据类字段)(1)

📅  最后修改于: 2023-12-03 15:19:30.096000             🧑  作者: Mango

Python中的数据类 | 设置3(数据类字段)

在Python 3.7中,加入了一项新的功能——数据类(data classes)。数据类能够帮助编写一些只有属性,没有方法的类,这样可以大大简化代码。

在数据类中,有多种字段(Field)可以使用,本文将介绍其中的三种:普通字段、默认字段和只读字段。

普通字段

普通字段是数据类中最常用的字段。通过在类中定义属性,可以轻松地定义一个普通字段。例如:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

这个数据类有两个普通字段:xy,类型都是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"

这个数据类有三个字段:widthheightcolor。其中color是默认字段,它的默认值是字符串white。当创建这个Rectangle类的实例时,可以在构造函数中传入widthheight,如果不传入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的只读字段,它的值由widthheight属性计算得到。由于area是只读字段,我们不能通过实例对象更改它的值。例如:

r = ImmutableRectangle(10, 20)
print(r.area)  # 200

r.area = 100  # AttributeError: can't set attribute

在这个例子中,我们创建了一个只读字段area,并且尝试更改它的值。由于area是只读字段,当我们试图更改它的值时,会抛出一个AttributeError异常。

总结

本文介绍了Python中数据类中的三种字段类型:普通字段、默认字段和只读字段。它们可以帮助我们轻松地创建只有属性,没有方法的类,并且可以使代码更加简洁易懂。