编写Python C类型,并希望编写乘法运算符

时间:2016-01-11 16:59:53

标签: python cpython

我正在用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__视为二进制乘法运算符?

1 个答案:

答案 0 :(得分:1)

如果你想要一个用C语言编写的类型来支持乘法,你需要提供tp_as_number fieldnb_multiply乘法功能,你需要明确提供一个__mul__方法。我会为您处理__mul__。查看how built-in types do it可能有所帮助。