Python的capi和\uyu add\uu调用

2024-06-17 16:02:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个绑定系统,它以一种稍微不寻常的方式向python公开类和函数。在

通常,我们会创建一个python类型并提供一个表示该类型方法的函数列表,然后允许python使用它的通用tp_getattro函数来选择正确的类型。在

由于我不在这里讨论的原因,我不能这样做,必须提供我自己的tp_getattro函数,该函数从其他地方选择方法并返回我自己的“绑定方法”包装器。这很好,但是意味着a类型方法没有在它的字典中列出(因此dir(MyType())没有显示任何有趣的内容)。在

问题是我似乎不能让__add__方法工作。参见以下示例:

>>> from mymod import Vec3
>>> v=Vec3()
>>> v.__add__
<Bound Method of a mymod Class object at 0xb754e080>
>>> v.__add__(v)
<mymod.Vec3 object at 0xb751d710>
>>> v+v
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'mymod.Vec3' and 'mymod.Vec3'

如您所见,Vec3有一个可以调用的__add__方法,但是python的+拒绝使用它。在

如何让python使用它?在python中,+操作符实际上是如何工作的,它使用什么方法来查看是否可以添加两个任意对象?在

谢谢。在

(注:我了解其他系统,如Boost.Python我有充分的理由不使用它们,不管它们多么美妙。)


Tags: 方法函数add类型列表object系统地方