C PyObject 结构包含字段tp_as_number
和。在什么情况下会调用这些?任何人都可以提供一些示例 Python 代码来调用这些 C 方法吗?tp_as_sequence
tp_as_mapping
问问题
381 次
1 回答
3
这些方法相当于 python 的特殊方法,并且在相同的情况下被调用。例如tp_as_number->nb_add
在执行时调用a + b
,a
是扩展类型。它相当于__add__
。inplace_*
函数是方法的等价物__i*__
。
请注意,这些__r*__
方法的实现只是将参数交换到普通函数,因此5 + a
扩展a
类型将首先尝试调用 的数字版本,在nb_add
此失败后它尝试nb_add
将其作为第一个参数和第二个参数。a
5
a
tp_as_mapping
和tp_as_sequence
结构也是如此。和函数由内置函数 调用mp_length
,等效于。从理论上讲,您可以为and实现不同的功能,在这种情况下具有优先权(这可以从源代码中看到,即使我不知道是否记录了这种行为)。sq_length
len
__len__
mp_length
sq_length
sq_length
还要注意,例如,+
运算符可以在不同的功能中实现。在sq_concat
尝试之后调用nb_add
,因此扩展类型可以支持+
运算符而无需nb_add
设置函数。
于 2013-02-09T12:59:20.803 回答