想象一下有一个返回元组列表的方法:
[(a1, b1, c1), (a2, b2, c2), ...]
该库广泛使用,您不希望破坏现有代码。
您想要从元组更改为对象,因为您要添加新的(但可选)值。
更改为[(a1, b1, c1, d1), (a2, b2, c2, d1), ...]
会破坏现有代码。
我该怎么办?
答案 0 :(得分:1)
您可以创建一个扩展内置元组类型的类,向该类添加一个属性,并返回该类的实例而不是纯元组。旧代码将继续工作,新代码将能够访问属性。
class MyTuple(tuple): pass
t = MyTuple((1, 2, 3))
t.d1 = "my new attribute"