我正在编写一个绑定系统,它以一种稍微不寻常的方式向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我有充分的理由不使用它们,不管它们多么美妙。)
在你的类型的number methods结构中有
nb_add
吗(由你的type object的字段tp_as_number
指向)?在相关问题 更多 >
编程相关推荐