下面的例子:
import numpy as np
class SimpleArray(np.ndarray):
__array_priority__ = 10000
def __new__(cls, input_array, info=None):
return np.asarray(input_array).view(cls)
def __eq__(self, other):
return False
a = SimpleArray(10)
print (np.int64(10) == a)
print (a == np.int64(10))
给出以下输出
$ python2.7 eq.py
True
False
所以在第一种情况下,SimpleArray.__eq__
不被调用(因为它应该总是 return False
)。这是一个错误,如果是这样,任何人都可以想到解决方法吗?如果这是预期的行为,我如何确保SimpleArray.__eq__
在这两种情况下都被调用?
编辑:只是为了澄清,这只发生在 Numpy 标量数组中 - 对于普通数组,__eq__
总是被调用,因为它__array_priority__
告诉 Numpy 它应该始终执行它,__eq__
即使对象位于相等操作的 RHS 上:
b = SimpleArray([1,2,3])
print(np.array([1,2,3]) == b)
print(b == np.array([1,2,3]))
给出:
False
False
因此,对于标量 Numpy 'arrays',__array_priority__
似乎没有得到尊重。