相关疑难解决方法(0)

为什么Python没有"__req__"(反映相等)方法?

我有一个小助手班:

class AnyOf(object):
    def __init__(self, *args):
        self.elements = args
    def __eq__(self, other):
        return other in self.elements
Run Code Online (Sandbox Code Playgroud)

这让我做了甜蜜的魔术:

>>> arr = np.array([1,2,3,4,5])
>>> arr == AnyOf(2,3)
np.array([False, True, True, False, False])
Run Code Online (Sandbox Code Playgroud)

无需使用列表理解(如np.array(x in (2,3) for x in arr).

(我维护一个让(可信)用户输入任意代码的用户界面,并且a == AnyOf(1,2,3)比非技术精明用户的列表理解更加可口.)

然而!

这只适用于一种方式!例如,如果我这样做,AnyOf(2,3) == arr那么我的AnyOf类的__eq__方法永远不会被调用:相反,NumPy数组的__eq__方法被调用,在内部(我会假设)调用其__eq__所有元素的方法.

这让我想知道:为什么Python不允许右侧等效__eq__?(大致相当于像__radd__,__rmul__等等的方法.)

python numpy python-datamodel python-internals

6
推荐指数
2
解决办法
341
查看次数