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

时间:2011-06-09 05:00:28

标签: c++ python record ada

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

from collections import namedtuple
Point = namedtuple("Point", "x y")
p1 = Point(x=11, y=22)

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

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

答案 1 :(得分:3)

字典是在Python中执行此操作的经典方法。它不能强制一个值必须存在,并且不会执行初始值。

config = {'maxusers': 20, 'port': 2345, 'quota': 20480000}

collections.namedtuple()是支持它的Python版本中的另一个选项。