我需要创建一个虚拟对象来标记列表中未初始化的元素(显然,字典是更好的选择,但由于内存限制很大,我需要一个列表)。
我正在考虑为此目的使用具有以下属性的对象:
- 它的计算结果不等于除其自身之外的任何其他对象。
- 除了原始引用(通过赋值或参数传递)之外,无法创建对其的引用。
None
满足第一个要求,但不满足第二个要求(因为它可以使用文字 None
在程序中的任何位置创建)。
我认为,一种可行的方法是:
UNINITIALIZED_VALUE = object() # will be compared for == through identity
a = [1, UNINITIALIZED_VALUE, 2, UNINITIALIZED_VALUE]
a[1] == a[3] # True
a[0] == UNINITIALIZED_VALUE # False
我想仔细检查一下,确保我没有遗漏这种方法的任何潜在问题。 (我使用的是 Python 3。)
最佳答案
不,每个人都是这样做的。请注意,您不能在此类对象上设置任意属性。
关于python - 创建一个独特的虚拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12312245/