(使用Hash和`==`的Python中的单例模式)

时间:2016-08-15 10:28:05

标签: python hash singleton

我正在研究在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)

0 个答案:

没有答案