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

标签 python migration queue namedtuple

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

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/

相关文章:

python - 如何在谷歌colab中安装keras_contrib?

postgresql - 使用 'value too long' 的非 ascii 字符移动 PostgreSQL 数据库失败

c# - VC++ 到 C# 迁移指南/方法/问题

python - 将 multiprocessing.Queue 转储到列表中

c++ - Dijkstra 的 - 队列

ios - 关于IOS中的全局队列。

python - 交换嵌套字典的键

python - 在python中将日期截断为上周一或一周中的任何一天

python - python wx中打开子窗口时关闭父窗口

python - django 迁移表不存在