我的代码在带有命名元组的服务器上运行:
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/