什么是Ada记录/ C++结构类型的Python对应物?

Gre*_*reg 3 c++ python record ada

假设我正在记录数据并想要关联一些数据元素,这样每个记录集总是具有固定的组合,即没有丢失的字段.

我作为程序员的大多数经验都是使用Ada或C/C++变体.在Ada中,我将使用记录类型和聚合赋值,以便在使用新字段更新记录类型时,编译器将通知使用该记录的任何人.在C++中,我可能会使用存储类和构造函数来做类似的事情.

在Python中处理类似情况的适当方法是什么?这是一个类是正确答案的情况,还是比Ada记录的重量更轻?

另外一个想法,Ada记录和C++构造函数都允许默认初始化值.是否有上述问题的Python解决方案也提供了该功能?

Don*_*ell 5

一个namedtuple(从集合库)可能适合你的目的.它基本上是一个元组,它允许按名称和索引位置引用字段.所以它是有序命名字段的固定结构.它也是轻量级的,因为它用于slots定义字段名称,因此无需在每个实例中携带字典.

一个典型的用例是定义一个点:

from collections import namedtuple
Point = namedtuple("Point", "x y")
p1 = Point(x=11, y=22)
Run Code Online (Sandbox Code Playgroud)

它的主要缺点是,作为一个元组,它是不可改变的.但是有一种方法,replace它允许您用新值替换一个或多个字段,但在该过程中创建了一个新实例.

在ActiveState Python Recipes 576555中还有一个可变版本的namedtuple,称为记录,允许直接字段更改.我已经使用它并且可以保证它运行良好.