为了简化我的代码,我想实现一个包含一切的集合,即UniversalSet
。我认为解决此问题的最简单方法是拥有一个自定义集,该集对任何查询都返回 True。在我的特殊情况下,我最感兴趣的是 __intersect__
满足以下条件的集合:
u_set = UniversalSet()
u_set & {1, 2, 3} == {1, 2, 3} # (1)
{1, 2, 3} & u_set == {1, 2, 3} # (2)
我按以下方式对 set
进行了子类化:
class UniversalSet(set):
def __and__(self, other):
return other
这适用于 (1)
,但 (2)
仍然失败。是否有类似的简单方法使 (2)
正常工作?
最佳答案
您还需要定义 and 运算符 (__rand__
) 的反转版本,以便在它是第二个参数和第一个参数时调用您的子类方法。
class UniversalSet(set):
def __and__(self, other):
return other
def __rand__(self, other):
return other
关于python - 实现 All/Universal 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565838/