我正在用C语言为Python编写一个特殊的数字类型作为扩展,我想为它提供一个专门的二进制乘法运算符。
static PyMethodDef pyquat_Quat_methods[] = {
{"__mul__", (PyCFunction)pyquat_Quat_mul, METH_O, "multiply unit quaternion by another using the Hamiltonian definition"},
{NULL, NULL, 0, NULL} /* Sentinel */
};
如果我然后编译并加载库,我可以成功创建名为x和y的对象的实例。我甚至可以做到
w = x.__mul__(y)
但如果我尝试
w = x * y
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'pyquat.Quat' and 'pyquat.Quat'
我是否需要告诉Python将__mul__
视为二进制乘法运算符?
答案 0 :(得分:1)
如果你想要一个用C语言编写的类型来支持乘法,你需要提供tp_as_number
field和nb_multiply
乘法功能,你需要不明确提供一个__mul__
方法。我会为您处理__mul__
。查看how built-in types do it可能有所帮助。