任何人都可以修改 namedtuple 或提供替代类以使其适用于可变对象吗?
主要是为了可读性,我想要类似于 namedtuple 的东西:
from Camelot import namedgroup
Point = namedgroup('Point', ['x', 'y'])
p = Point(0, 0)
p.x = 10
>>> p
Point(x=10, y=0)
>>> p.x *= 10
Point(x=100, y=0)
必须可以腌制生成的对象。并且根据命名元组的特性,表示时输出的顺序必须与构造对象时参数列表的顺序相匹配。
原文由 Alexander 发布,翻译遵循 CC BY-SA 4.0 许可协议
collections.namedtuple
- recordclass 有一个可变的替代方案。它可以从 PyPI 安装:它具有与
namedtuple
相同的 API 和内存占用,并且它支持分配(它也应该更快)。例如:recordclass
(自0.5起)支持类型提示:有一个更完整的 示例(它还包括性能比较)。
Recordclass
库现在提供另一个变体recordclass.make_dataclass
工厂函数。 It support dataclasses-like API (there are module level functionsupdate
,make
,replace
instead ofself._update
,self._replace
,self._asdict
,cls._make
方法)。recordclass
和make_dataclass
可以生成类,其实例占用的内存少于基于__slots__
的实例。这对于具有属性值的实例可能很重要,这些实例不打算具有引用循环。如果您需要创建数百万个实例,它可能有助于减少内存使用量。这是一个说明性的 例子。