我有一个小助手类:
class AnyOf(object):
def __init__(self, *args):
self.elements = args
def __eq__(self, other):
return other in self.elements
这让我可以做一些甜蜜的魔法,比如:
>>> arr = np.array([1,2,3,4,5])
>>> arr == AnyOf(2,3)
np.array([False, True, True, False, False])
无需使用列表推导(如np.array(x in (2,3) for x in arr
)。
(我维护的 UI 允许(受信任的)用户输入任意代码,并且a == AnyOf(1,2,3)
比对非技术性用户的列表理解更可口。)
然而!
这只有一种方式!例如,如果我这样做,AnyOf(2,3) == arr
那么我AnyOf
的类的__eq__
方法永远不会被调用:相反,NumPy 数组的__eq__
方法被调用,它在内部(我假设)调用其__eq__
所有元素的方法。
这让我想知道:为什么 Python 不允许右侧等价于__eq__
? (大致相当于__radd__
, __rmul__
, 等方法。)