Python nb_divide在Python 3中不再可用

Python nb_divide在Python 3中不再可用,python,python-3.x,cpython,Python,Python 3.x,Cpython,几年前,我为Python2定制了一个C模块,现在我将其升级到Python3。PyNumberMethods定义在2和3之间更改,以注册支持某些运算符的类 Python 2 这个班有两个除法算符。我用了第一个,它成功了 typedef struct { binaryfunc nb_add; binaryfunc nb_subtract; binaryfunc nb_multiply; binaryfunc nb_divide; <------- bin

几年前,我为Python2定制了一个C模块,现在我将其升级到Python3
PyNumberMethods
定义在2和3之间更改,以注册支持某些运算符的类

Python 2

这个班有两个除法算符。我用了第一个,它成功了

typedef struct {
    binaryfunc nb_add;
    binaryfunc nb_subtract;
    binaryfunc nb_multiply;
    binaryfunc nb_divide; <-------
    binaryfunc nb_remainder;
    [...]
    binaryfunc nb_true_divide; <-------
    [...]
} PyNumberMethods;
我尝试了
nb\u true\u divide
,它也能工作。所有这些函数之间的区别是什么?如果我想支持
foo.vector()/100.0

,我应该使用哪一个函数?还有,状态:

返回故障时
o1
除以
o2
的下限,或
NULL
。这相当于整数的“经典”除法

这是增加的内容。至于差异,已经有人问过了,例如,参见

简而言之,如果您希望根据所使用的
/
为自定义类型附加行为,请定义
np\u true\u divide
槽。对于
/
,使用
np\u loor\u divide

还有一个,说明:

返回故障时
o1
除以
o2
的下限,或
NULL
。这相当于整数的“经典”除法

这是增加的内容。至于差异,已经有人问过了,例如,参见


简而言之,如果您希望根据所使用的
/
为自定义类型附加行为,请定义
np\u true\u divide
槽。对于
/
,使用
np\u loor\u divide

只是想知道,因此,在我的示例中,我也需要它来进行浮点运算,因此
nb\u true\u divide
似乎是更好的选择?@DanielStephens因为
np\u floor\u divide
将允许您将行为附加到
//code>符号,并将
np\u true\u divide
符号附加到
//code>符号,我想说
true\u divide
槽确实就是您想要的之后,只是想知道,因此,在我的示例中,我也需要它来进行浮点运算,因此
nb\u true\u divide
似乎是更好的选择?@DanielStephens因为
np\u floor\u divide
将允许您将行为附加到
//code>符号,并将
np\u true\u divide
符号附加到
//code>符号,我想说
true\u divide
槽确实就是您想要的之后
typedef struct {
    binaryfunc nb_add;
    binaryfunc nb_subtract;
    binaryfunc nb_multiply;
    binaryfunc nb_remainder; <-------
    [...]
    binaryfunc nb_true_divide; <-------
    [...]
} PyNumberMethods;