更改返回值:元组列表到对象,并保持向后兼容性

时间:2015-02-28 16:57:34

标签: python tuples backwards-compatibility

想象一下有一个返回元组列表的方法:

[(a1, b1, c1), (a2, b2, c2), ...]

该库广泛使用,您不希望破坏现有代码。

您想要从元组更改为对象,因为您要添加新的(但可选)值。

更改为[(a1, b1, c1, d1), (a2, b2, c2, d1), ...]会破坏现有代码。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以创建一个扩展内置元组类型的类,向该类添加一个属性,并返回该类的实例而不是纯元组。旧代码将继续工作,新代码将能够访问属性。

class MyTuple(tuple): pass
t = MyTuple((1, 2, 3))
t.d1 = "my new attribute"