假设我正在记录数据并想要关联一些数据元素,这样每个记录集总是具有固定的组合,即没有遗漏字段。
我作为程序员的大多数经验都是使用Ada或C / C ++变体。在Ada中,我将使用记录类型和聚合赋值,以便在使用新字段更新记录类型时,编译器将通知使用该记录的任何人。在C ++中,我可能会使用存储类和构造函数来做类似的事情。
在Python中处理类似情况的适当方法是什么?这是一个类是正确答案的情况,还是比Ada记录的重量更轻?
另外一个想法,Ada记录和C ++构造函数都允许默认初始化值。是否有上述问题的Python解决方案也提供了该功能?
答案 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版本中的另一个选项。