Я сделал пользовательский C -модуль для Python 2 через несколько лет go, который теперь я обновляю до Python 3 . Определение 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;
Python 3
nb_divide
было удалено, а вместо него nb_remainder
. Это должна быть новая функция?
typedef struct {
binaryfunc nb_add;
binaryfunc nb_subtract;
binaryfunc nb_multiply;
binaryfunc nb_remainder; <-------
[...]
binaryfunc nb_true_divide; <-------
[...]
} PyNumberMethods;
Вместо этого я попробовал nb_true_divide
, и она тоже работает. В чем разница между всеми этими функциями и какую из них мне следует использовать, если я хочу поддерживать foo.vector() / 100.0