我正在研究在python中使用准单例模式的方法。快速问题描述:
我有描述某个组子集的对象。为简单起见,假设set([1,2,3])
中的整数。在我的情况下,比较是困难的,如果可能的话很昂贵,所以我假设如果我有
complex_set1 = ...
complex_set2 = ...
这些是不同的。此外,所有集合都是不可变的(如freezeset)。除非为了方便而存在完整和空集
full_set = FullSet()
empty_set = EmptySet()
这些似乎有意义成为单身人士。一种方法是创建一个实例,然后将其添加到导入上的包。因此,只存在一个,你不能创建另一个。
现在我的想法:
因为我不关心我是否有多个对象,只要它们在任何情况下被认为是相同的(除了a is b
显然是假的)我只是让它们看起来相等(就像单身一样)。一个例子是
len(set([FullSet(), FullSet()]))
>>> 1
所以,我试验了
def hash(self):
return 0 # make sure all have the same hash
def __eq__(self, other):
if is instance(other, FullSet):
return True
return NotImplemented
这有名字吗?它被认为是单身模式还是其他什么? 我应该使用这个还是有警告要注意?
对哈希值的任何评论,除了比较之外还用于其他目的?使用例如更有意义吗? return hash(FullSet)