Object Protocol

请注意,调用getattr()getattribute()方法时发生的异常将被抑制。要获取错误报告,请改用PyObject_GetAttr()

请注意,在调用getattr()getattribute()方法并创建临时字符串对象时发生的异常将被抑制。要获取错误报告,请改用PyObject_GetAttrString()

从对象* o 检索名为 attr_name *的属性。成功返回属性值,失败返回NULL。这等效于 Python 表达式o.attr_name

从对象* o 检索名为 attr_name *的属性。成功返回属性值,失败返回NULL。这等效于 Python 表达式o.attr_name

通用属性获取器函数,应将其放入类型对象的tp_getattro插槽中。它在对象的 MRO 中的类字典中查找 Descriptors,并在对象的dict(如果存在)中查找属性。如Implementing Descriptors所述,数据 Descriptors 优先于实例属性,而非数据 Descriptors 则不然。否则,将引发AttributeError

如果* v *为NULL,则删除该属性,但是不赞成使用此Function,而推荐使用PyObject_DelAttr()

如果* v *为NULL,则删除该属性,但是不赞成使用此Function,而推荐使用PyObject_DelAttrString()

__dict__Descriptors 的获取程序的通用实现。如有必要,它将创建字典。

版本 3.3 中的新Function。

版本 3.3 中的新Function。

使用* opid 指定的操作比较 o1 o2 的值,该操作必须是Py_LTPy_LEPy_EQPy_NEPy_GTPy_GE之一,与<<===!=>对应或>=。这等效于 Python 表达式o1 op o2,其中op是与 opid *对应的运算符。如果成功,则返回比较的值;如果失败,则返回NULL

Note

如果* o1 o2 *是同Pair象,则PyObject_RichCompareBool()将始终为Py_EQ返回1,对于Py_NE返回0

计算对象* o *的字符串表示形式。成功返回字符串表示形式,失败返回NULL。这等效于 Python 表达式repr(o)。由repr()内置函数调用。

在版本 3.4 中进行了更改:此函数现在包括调试 assert,以帮助确保它不会静默丢弃活动异常。

作为PyObject_Repr(),计算对象* o *的字符串表示形式,但是使用\x\u\U进行转义,以转义PyObject_Repr()返回的字符串中的非 ASCII 字符。生成的字符串类似于 Python 2 中PyObject_Repr()返回的字符串。由ascii()内置函数调用。

计算对象* o *的字符串表示形式。成功返回字符串表示形式,失败返回NULL。这等效于 Python 表达式str(o)。由str()内置函数调用,因此也由print()函数调用。

在版本 3.4 中进行了更改:此函数现在包括调试 assert,以帮助确保它不会静默丢弃活动异常。

计算对象* o 的字节表示形式。失败返回NULL,成功返回字节对象。当 o 不是整数时,这等效于 Python 表达式bytes(o)。与bytes(o)不同,当 o *是整数而不是零初始化字节对象时,引发 TypeError。

如果* cls 是一个 Tuples,将对 cls *中的每个条目进行检查。当至少一项检查返回1时,结果将为1,否则为0

如果* cls 具有subclasscheck()方法,则将如 PEP 3119中所述调用它以确定子类状态。否则, derived cls *的子类,如果它是直接或间接子类,即包含在cls.__mro__中。

通常仅将类对象(即type的实例或派生类)视为类。但是,对象可以pass具有__bases__属性(必须是 Base Class 的 Tuples)来覆盖此属性。

如果* cls 是一个 Tuples,将对 cls *中的每个条目进行检查。当至少一项检查返回1时,结果将为1,否则为0

如果* cls 具有instancecheck()方法,则将如 PEP 3119中所述调用它以确定子类状态。否则,如果 inst cls 的实例,则其类是 cls *的子类。

如果对象* cls *被认为是类,并且可以pass具有__bases__属性(必须是 Base Class 的 Tuples)来覆盖其 Base Class,则可以覆盖该对象。

调用可调用的 Python 对象* callable ,其参数由 Tuples args 给出,命名参数由字典 kwargs *给出。

成功返回调用结果,或者引发异常,失败则返回NULL

这等效于 Python 表达式:callable(*args, **kwargs)

使用 Tuples* args 给出的参数调用可调用的 Python 对象 callable 。如果不需要参数,则 args *可以为NULL

成功返回调用结果,或者引发异常,失败则返回NULL

这等效于 Python 表达式:callable(*args)

使用可变数量的 C 参数调用可调用的 Python 对象* callable *。使用Py_BuildValue()样式格式字符串描述 C 参数。格式可以为NULL,表示未提供任何参数。

成功返回调用结果,或者引发异常,失败则返回NULL

这等效于 Python 表达式:callable(*args)

请注意,如果仅传递PyObject *参数,则PyObject_CallFunctionObjArgs()是更快的选择。

在版本 3.4 中更改:格式的类型已从char *更改。

用可变数量的 C 参数调用对象* obj 的名为 name *的方法。 C 参数由Py_BuildValue()格式的字符串描述,该字符串应产生一个 Tuples。

格式可以为NULL,表示未提供任何参数。

成功返回调用结果,或者引发异常,失败则返回NULL

这等效于 Python 表达式:obj.name(arg1, arg2, ...)

请注意,如果仅传递PyObject *参数,则PyObject_CallMethodObjArgs()是更快的选择。

在版本 3.4 中更改:名称格式的类型已从char *更改。

调用可变数量的PyObject*参数的可调用 Python 对象* callable *。提供的参数是可变数量的参数,后跟NULL

成功返回调用结果,或者引发异常,失败则返回NULL

这等效于 Python 表达式:callable(arg1, arg2, ...)

调用 Python 对象* obj 的方法,该方法的名称在 name *中作为 Python 字符串对象给出。使用可变数量的PyObject*参数来调用它。提供的参数是可变数量的参数,后跟NULL

成功返回调用结果,或者引发异常,失败则返回NULL

成功返回调用结果,或者引发异常,失败则返回NULL

如果可调用对象支持,则使用 vectorcall 协议。否则,参数将转换为使用tp_call

Note

该函数是临时函数,有望在 Python 3.9 中公开,其名称有所不同,并且语义可能有所更改。如果使用该函数,请计划为 Python 3.9 更新代码。

3.8 版的新Function。

只要他们能便宜地做到这一点(无需额外分配),就会鼓励呼叫者使用PY_VECTORCALL_ARGUMENTS_OFFSET。这样做将允许诸如绑定方法之类的可调用对象廉价地进行其后续调用(包括前置* self *参数)。

3.8 版的新Function。

3.8 版的新Function。

对于支持vectorcall的可调用对象,参数在内部转换为 vectorcall 约定。因此,与_PyObject_Vectorcall()相比,此函数会增加一些开销。仅当调用者已经有可用的字典时才应使用它。

Note

该函数是临时函数,有望在 Python 3.9 中公开,其名称有所不同,并且语义可能有所更改。如果使用该函数,请计划为 Python 3.9 更新代码。

3.8 版的新Function。

在版本 3.2 中更改:返回类型现在为 Py_hash_t。这是一个与 Py_ssize_t 大小相同的有符号整数。

当* o 不是NULL时,返回与对象 o *的对象类型相对应的类型对象。失败时,引发SystemError并返回NULL。这等效于 Python 表达式type(o)。此函数增加返回值的参考计数。确实没有理由使用此函数代替通用表达式o->ob_type,该表达式返回类型为PyTypeObject*的指针,除非需要增加引用计数。

3.4 版的新Function。

失败时返回与对象* key NULL对应的 o *元素。这等效于 Python 表达式o[key]

这等效于 Python 表达式dir(o),返回适合对象参数的字符串列表(可能为空),如果有错误,则返回NULL。如果参数为NULL,则类似于 Python dir(),返回当前本地名称。在这种情况下,如果没有执行框架处于活动状态,则返回NULL,但是PyErr_Occurred()将返回 false。

这等效于 Python 表达式iter(o)。它为对象参数返回一个新的迭代器,如果对象已经是一个迭代器,则返回对象本身。如果无法迭代该对象,则引发TypeError并返回NULL

首页