用名称Tuples迁移代码



我的代码在带有名称的服务器上运行:

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

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

我想在我的代码中添加一个新功能,该功能需要在名为tuple中的新属性。有没有一个很好的方法来保持兼容性?也就是说,我可以停止并启动服务器,然后将代码更改为:

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是否存在,它应该有效

查看您如何定义元组,只要您不更改属性的顺序,它应该无需任何问题即可。

显然在您的代码中,您现在不应该依靠元组长3而不是4。

最新更新