Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与NumPy实例的相等性比较调用`\u bool__`_Python_Pandas_Numpy_Magic Methods - Fatal编程技术网

Python 与NumPy实例的相等性比较调用`\u bool__`

Python 与NumPy实例的相等性比较调用`\u bool__`,python,pandas,numpy,magic-methods,Python,Pandas,Numpy,Magic Methods,我已经定义了一个类,在这个类中,它的\uuuuu ge\uuuu方法返回自身的一个实例,并且不允许调用它的\uuuu bool\uuuuu方法(类似于Pandas系列) 为什么在np.int8(0)期间调用X.\uuuu bool\uuuu,我怀疑np.int8.\uu le\uuuu的定义是为了不返回NotImplemented并让X.\uu ge\uuuu接管,而是尝试返回类似not(np.int(8)>X),然后np.int8.\uu gt\uuu引发NotImplemented。一旦X.

我已经定义了一个类,在这个类中,它的
\uuuuu ge\uuuu
方法返回自身的一个实例,并且不允许调用它的
\uuuu bool\uuuuu
方法(类似于Pandas
系列


为什么在
np.int8(0)期间调用
X.\uuuu bool\uuuu
,我怀疑
np.int8.\uu le\uuuu
的定义是为了不返回
NotImplemented
并让
X.\uu ge\uuuu
接管,而是尝试返回类似
not(np.int(8)>X)
,然后
np.int8.\uu gt\uuu
引发
NotImplemented
。一旦
X.\uuuu gt\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

(仍在尝试跟踪定义了要确认的
int8.\uu gt\uu
的位置。)

(更新:不完全正确。
int8
使用一个通用的富比较函数,该函数仅将值转换为0维数组,然后返回数组和
x
上的
PyObject\u RichCompare
的结果)


我确实发现它似乎最终实现了
np.int8.\uu le\uuuu

static NPY_INLINE int
rational_le(rational x, rational y) {
    return !rational_lt(y,x);
}
如果其中一个参数(如
X
)不是NumPy类型,我不清楚如何避免使用此函数。我想我放弃了。

TL;博士
X.\uuuu数组\u优先级\uuuuu=1000


最大的提示是它与一个
pd.Series
一起工作

首先,我试着让
X
继承自
pd.Series
。这起作用了(即不再调用
\uuuu bool\uuu

为了确定NumPy是使用
isinstance
check还是duck类型方法,我删除了显式继承并添加了(基于):

@属性
定义类(自身):
返回pd系列
该操作不再工作(即调用了
\uuubool\uuu

所以现在我想我们可以得出结论,NumPy使用的是duck类型方法。所以我查看了
X
上访问的属性

我将以下内容添加到
X

def\uuuu getattribute\uuuuuu(自身,项目):
打印(“getattr”,项目)
返回对象。获取属性(自身,项)

再次将
X
实例化为
X
,并调用
np.int8(0),我怀疑这是因为
False==0
,所以
np.int8(0)
应该与布尔
False
进行比较。但是
False它与
np.int8(1)失败。我感谢你帮我研究一下这个问题。调试是一件非常头疼的事情,我想你也有同样的感觉:)我想我们会聚了:)你跟踪的属性,我想,是从原始标量生成的数组中得到的,以便评估丰富的比较。
getattr __array_priority__
getattr __array_priority__
getattr __array_priority__
getattr __array_struct__
getattr __array_interface__
getattr __array__
getattr __array_prepare__
<__main__.X object at 0x000002022AB5DBE0>.__ge__
<__main__.X object at 0x000002021A73BE50>.__bool__
getattr __array_struct__
getattr __array_interface__
getattr __array__
Traceback (most recent call last):
  File "<stdin>", line 32, in <module>
    np.int8(0) <= x
  File "<stdin>", line 21, in __bool__
    assert False
AssertionError