Python中使用Hash和`==`

2024-09-25 08:39:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究如何在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)更有意义吗


Tags: 对象selfreturnisdef模式整数hash