我有一个小助手班:
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__等等的方法.)