对象协议

PyObject *Py_NotImplemented

这个 NotImplemented singleton,用于表示没有为给定的类型组合实现操作。

Py_RETURN_NOTIMPLEMENTED

正确处理返回 Py_NotImplemented 从C函数中(即,递增NotImplemented的引用计数并返回它)。

int PyObject_Print(PyObject *o, FILE *fp, int flags)

打印对象 o 在文件上 fp . 返回 -1 关于错误。flags参数用于启用某些打印选项。目前唯一支持的选项是 Py_PRINT_RAW 如果给予的话, str() 而不是 repr() .

int PyObject_HasAttr(PyObject *o, PyObject *attr_name)

返回 1 如果 o 具有属性 attr_name0 否则。这相当于python表达式 hasattr(o, attr_name) . 此函数总是成功的。

请注意,调用时发生的异常 __getattr__()__getattribute__() 方法将被抑制。要获取错误报告,请使用 PyObject_GetAttr() 相反。

int PyObject_HasAttrString(PyObject *o, const char *attr_name)

返回 1 如果 o 具有属性 attr_name0 否则。这相当于python表达式 hasattr(o, attr_name) . 此函数总是成功的。

请注意,调用时发生的异常 __getattr__()__getattribute__() 方法和创建临时字符串对象将被禁止。要获取错误报告,请使用 PyObject_GetAttrString() 相反。

PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)
Return value: New reference.

检索名为的属性 attr_name 从对象 o . 返回成功时的属性值,或者 NULL 失败时。这相当于python表达式 o.attr_name .

PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)
Return value: New reference.

检索名为的属性 attr_name 从对象 o . 返回成功时的属性值,或者 NULL 失败论。这相当于python表达式 o.attr_name .

PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)
Return value: New reference.

要放入类型对象的 tp_getattro 狭槽。它在对象的mro中的类字典中查找描述符,并在对象的mro中查找属性 __dict__ (如果有的话)。概述如下 实现描述符 ,数据描述符优先于实例属性,而非数据描述符不优先于实例属性。否则, AttributeError 提高了。

int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)

设置名为的属性的值 attr_name 为对象 o 对价值 v . 引发异常并返回 -1 失败时;返回 0 论成功。这相当于python语句 o.attr_name = v .

如果 vNULL ,将删除该属性,但不推荐使用此功能,而赞成使用 PyObject_DelAttr() .

int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)

设置名为的属性的值 attr_name 为对象 o 对价值 v . 引发异常并返回 -1 失败时;返回 0 论成功。这相当于python语句 o.attr_name = v .

如果 vNULL ,将删除该属性,但不推荐使用此功能,而赞成使用 PyObject_DelAttrString() .

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)

要放入类型对象的 tp_setattro 狭槽。它在对象的MRO中的类字典中查找数据描述符,如果找到,它优先于在实例字典中设置或删除属性。否则,将在对象的 __dict__ (如果有的话)。关于成功, 0 返回,否则返回 AttributeError 被抚养和 -1 返回。

int PyObject_DelAttr(PyObject *o, PyObject *attr_name)

删除名为的属性 attr_name 为对象 o . 返回 -1 失败论。这相当于python语句 del o.attr_name .

int PyObject_DelAttrString(PyObject *o, const char *attr_name)

删除名为的属性 attr_name 为对象 o . 返回 -1 失败论。这相当于python语句 del o.attr_name .

PyObject *PyObject_GenericGetDict(PyObject *o, void *context)
Return value: New reference.

一个通用实现,用于 __dict__ 描述符。如果需要,它会创建字典。

3.3 新版功能.

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)

__dict__ 描述符。此实现不允许删除字典。

3.3 新版功能.

PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
Return value: New reference.

比较的值 o1o2 使用指定的操作 opid ,必须是 Py_LTPy_LEPy_EQPy_NEPy_GTPy_GE ,对应于 <<===!=>>= 分别。这相当于python表达式 o1 op o2 在哪里 op 运算符是否与 opid . 返回比较成功时的值,或 NULL 失败论。

int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)

比较的值 o1o2 使用指定的操作 opid ,必须是 Py_LTPy_LEPy_EQPy_NEPy_GTPy_GE ,对应于 <<===!=>>= 分别。返回 -1 关于错误, 0 如果结果是错误的, 1 否则。这相当于python表达式 o1 op o2 在哪里 op 运算符是否与 opid .

注解

如果 o1o2 是同一个物体, PyObject_RichCompareBool() 会一直回来的 1 对于 Py_EQ0 对于 Py_NE .

PyObject *PyObject_Repr(PyObject *o)
Return value: New reference.

计算对象的字符串表示形式 o . 返回成功时的字符串表示形式, NULL 失败时。这相当于python表达式 repr(o) . 被调用 repr() 内置功能。

在 3.4 版更改: 此函数现在包含一个调试断言,以帮助确保它不会自动放弃活动异常。

PyObject *PyObject_ASCII(PyObject *o)
Return value: New reference.

AS PyObject_Repr() ,计算对象的字符串表示形式 o ,但转义字符串中由返回的非ASCII字符 PyObject_Repr() 具有 \x\u\U 逃逸。这将生成一个类似于 PyObject_Repr() 在Python 2中。被调用 ascii() 内置功能。

PyObject *PyObject_Str(PyObject *o)
Return value: New reference.

计算对象的字符串表示形式 o . 返回成功时的字符串表示形式, NULL 失败时。这相当于python表达式 str(o) . 被调用 str() 内置函数,因此 print() 功能。

在 3.4 版更改: 此函数现在包含一个调试断言,以帮助确保它不会自动放弃活动异常。

PyObject *PyObject_Bytes(PyObject *o)
Return value: New reference.

计算对象的字节表示形式 o . NULL 失败时返回,成功时返回bytes对象。这相当于python表达式 bytes(o)o 不是整数。不像 bytes(o) ,当 o 是整数,而不是初始化为零的字节对象。

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)

返回 1 如果上课 衍生的 与类相同或从类派生 cls ,否则返回 0 . 如果出现错误,返回 -1 .

如果 cls 是元组,将对中的每个条目进行检查 cls . 结果是 1 当至少一张支票返回时 1 ,否则 0 .

如果 cls 有一个 __subclasscheck__() 方法,将调用它以确定子类状态,如中所述 PEP 3119 . 否则, 衍生的 是的子类 cls 如果它是直接或间接的子类,即包含在 cls.__mro__ .

通常只有类对象,即 type 或派生类,被视为类。但是,对象可以通过 __bases__ 属性(必须是基类的元组)。

int PyObject_IsInstance(PyObject *inst, PyObject *cls)

返回 1 如果 inst 是类的实例 clscls0 如果没有。出错时返回 -1 并设置一个例外。

如果 cls 是元组,将对中的每个条目进行检查 cls . 结果是 1 当至少一张支票返回时 1 ,否则 0 .

如果 cls 有一个 __instancecheck__() 方法,将调用它以确定子类状态,如中所述 PEP 3119 . 否则, inst 是的实例 cls 如果它的类是 cls .

一个实例 inst 可以通过具有 __class__ 属性。

物体 cls 如果它被视为一个类以及它的基类是什么,则可以通过 __bases__ 属性(必须是基类的元组)。

Py_hash_t PyObject_Hash(PyObject *o)

计算并返回对象的hash值 o . 失败时返回 -1 . 这相当于python表达式 hash(o) .

在 3.2 版更改: 返回类型现在为py-hash-t。这是一个与py-ssize-t大小相同的带符号整数。

Py_hash_t PyObject_HashNotImplemented(PyObject *o)

设置一个 TypeError 表明 type(o) 不可hash并返回 -1 . 此功能在存储在 tp_hash 槽,允许类型显式地向解释器指示它不可hash。

int PyObject_IsTrue(PyObject *o)

返回 1 如果对象 o 被认为是真实的,以及 0 否则。这相当于python表达式 not not o . 失败时返回 -1 .

int PyObject_Not(PyObject *o)

返回 0 如果对象 o 被认为是真实的,以及 1 否则。这相当于python表达式 not o . 失败时返回 -1 .

PyObject *PyObject_Type(PyObject *o)
Return value: New reference.

什么时候? o 为非-NULL`,返回与对象的对象类型对应的类型对象 *o* . 失败时,加薪 :exc:`SystemError` 回报 ``NULL . 这相当于python表达式 type(o) . 此函数用于增加返回值的引用计数。实际上没有理由使用这个函数来代替公共表达式 o->ob_type ,返回类型的指针 PyTypeObject* ,除非需要递增的引用计数。

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

如果对象 o 属于类型 type 或亚型 type . 两个参数都必须是非-NULL

Py_ssize_t PyObject_Size(PyObject *o)
Py_ssize_t PyObject_Length(PyObject *o)

返回对象的长度 o . 如果对象 o 提供序列和映射协议,返回序列长度。关于错误, -1 返回。这相当于python表达式 len(o) .

Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t default)

返回对象的估计长度 o . 首先尝试返回其实际长度,然后使用 __length_hint__() ,最后返回默认值。关于错误返回 -1 .这相当于python表达式 operator.length_hint(o, default) .

3.4 新版功能.

PyObject *PyObject_GetItem(PyObject *o, PyObject *key)
Return value: New reference.

返回元素 o 与对象相对应 keyNULL 失败论。这相当于python表达式 o[key] .

int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)

映射对象 key 价值观 v . 引发异常并返回 -1 失败时;返回 0 论成功。这相当于python语句 o[key] = v . 这个函数 窃取对的引用 v .

int PyObject_DelItem(PyObject *o, PyObject *key)

删除对象的映射 key 从对象 o . 返回 -1 失败时。这相当于python语句 del o[key] .

PyObject *PyObject_Dir(PyObject *o)
Return value: New reference.

这相当于python表达式 dir(o) ,返回适合对象参数的字符串列表(可能为空),或者 NULL 如果有错误。如果参数是 NULL ,这就像 Python dir() ,返回当前局部变量的名称;在本例中,如果没有活动的执行帧,则 NULL 返回但 PyErr_Occurred() 将返回false。

PyObject *PyObject_GetIter(PyObject *o)
Return value: New reference.

这相当于python表达式 iter(o) . 它为对象参数返回一个新的迭代器,如果对象已经是迭代器,则返回对象本身。加薪 TypeError 回报 NULL 如果无法迭代对象。