gpt4 book ai didi

python - 使用 namedtuples 迁移正在运行的代码

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:49 25 4
gpt4 key购买 nike

我的代码在带有命名元组的服务器上运行:

Event = namedtuple("Event", ['attr1', 'attr2', 'attr3'])

服务器正在从队列中的其他服务器获取事件。

我想在我的代码中添加一个新功能,它需要 namedtuple 中的一个新属性。有没有一种好的方法可以做到这一点并保持向后兼容性?也就是说,我可以停止和启动服务器,并将代码更改为:

Event = namedtuple("Event", ['attr1', 'attr2', 'attr3', 'attr4'])

但与此同时,会有带有旧签名的事件排队。

以前有人做过吗?

最佳答案

它会按原样工作,只有当您使用新添加的属性时,您的代码才会出现问题,例如

from collections import namedtuple

Event1 = namedtuple("Event", ['attr1', 'attr2', 'attr3', 'attr4'])
Event2 = namedtuple("Event", ['attr1', 'attr2', 'attr3', 'attr4', 'attr5'])

def handle_event(event):
print event.attr5

handle_event(Event2(1,2,3,4,5))
handle_event(Event1(1,2,3,4))

你会得到错误 AttributeError: 'Event' object has no attribute 'attr5' 所以如果你以向后兼容的方式处理这样的事情,比如检查 attr5 是否存在,它应该可以工作

关于python - 使用 namedtuples 迁移正在运行的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169173/

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