【发布时间】:2014-07-03 14:38:29
【问题描述】:
我想在 python 中原生实现一个不可变类型。我从这里收集的
How to make an immutable object in Python?
最好的方法是覆盖元组。假设我想要一个存储一些额外数据的元组。我会做类似的事情:
class MyTuple(tuple):
def __new__(cls, lst, data):
return tuple.__new__(cls, tuple(lst) + (data, ))
现在我想重写 len 函数:
def __len__(self):
return tuple.__len__(self) - 1
这适用于我在家里的 python 版本(Python 2.something,但我不知道是哪个),但在我的办公室计算机上(Python 2.7.3)它会破坏切片:如果我这样做
m = MyTuple([1,2], 0)
print(m[:-1])
我得到(1, ),而在家里我会得到(1, 2)(我实际上并没有检查,但将我的问题追溯到这个最小的例子,我想是这样)。所以似乎在一种实现中,切片调用tuple.__len__,而在另一种实现中调用MyTuple.__len__。我不介意任何一种方式,但一致性会很好。
所以我的问题是:是否有稳健的解决方案,如果没有,哪些行为将是稳定的?
编辑:正如 Leonardo.Z 所建议的,我的“家”python 实际上是 Python 3(.4)。我一直在尝试一个新的 ide,并没有注意它使用的是哪个 Python。
【问题讨论】:
-
我确定你家的Python版本是3,而不是2!
标签: python python-2.7 inheritance slice