我正在研究如何在python中使用准单例模式。快速问题描述:
我有描述某个组的子集的对象。为简单起见,假设整数如set([1,2,3])
。在我的例子中,比较是困难的,如果可能的话,比较是昂贵的,所以我假设如果我有
complex_set1 = ...
complex_set2 = ...
这些是不同的。而且,所有集合都是不可变的(比如frozenset)。但为了方便起见,有满套和空套
full_set = FullSet()
empty_set = EmptySet()
这些似乎是有意义的单身。一种方法是创建一个实例并将其添加到import上的包。所以只有一个存在,你不能创造另一个。你知道吗
现在我的想法是:
因为我不在乎我是否有多个对象,只要它们在任何情况下都被认为是相同的(此外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)
更有意义吗
目前没有回答
相关问题 更多 >
编程相关推荐