gpt4 book ai didi

python - 将额外的字段添加到现有的 namedtuple 对象并解封

转载 作者:行者123 更新时间:2023-11-28 17:10:21 25 4
gpt4 key购买 nike

我有一些 pickle 格式的数据,其中包含以下对象的实例:

Point = namedtuple('Point', ['x',])

现在我想扩展 Point 对象以添加另一个变量“y”,但同时保持它与我已经 pickle 的数据兼容。

下面是我尝试过的,但似乎失败了。我还尝试通过在制作 Point 对象时将 y 参数设置为可选来制作 Point 类的代码,但效果不佳。关于如何进行的任何想法?

from collections import namedtuple
Point = namedtuple('Point', ['x'])
i = Point(1)
import cPickle
pick=cPickle.dumps(i)
Point = namedtuple('Point', ['x', 'y'])
cPickle.loads(pick)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 22, in __repr__
TypeError: not enough arguments for format string

最佳答案

元组是不可变的。首先 Unpickle,然后使用不同的 namedtuple 类创建一个新点并使用旧点的属性 x。对 Point 类使用相同的名称应该会产生您想要的效果:

Point = namedtuple('Point', ['x'])
i = Point(1)
pick=cPickle.dumps(i)


def unpickle_point(dumped_obj):
Point = namedtuple('Point', ['x'])
point = cPickle.loads(pick)
Point = namedtuple('Point', ['x', 'y'])
return Point(point.x, 2)

new_point = unpickle_point(pick)

现在:

>>> new_point
Point(x=1, y=2)

关于python - 将额外的字段添加到现有的 namedtuple 对象并解封,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47999460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com