对象协议¶
-
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_name 和0
否则。这相当于python表达式hasattr(o, attr_name)
. 此函数总是成功的。请注意,调用时发生的异常
__getattr__()
和__getattribute__()
方法将被抑制。要获取错误报告,请使用PyObject_GetAttr()
相反。
-
int PyObject_HasAttrString(PyObject *o, const char *attr_name)¶
返回
1
如果 o 具有属性 attr_name 和0
否则。这相当于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
.如果 v 是
NULL
,将删除该属性,但不推荐使用此功能,而赞成使用PyObject_DelAttr()
.
-
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶
设置名为的属性的值 attr_name 为对象 o 对价值 v . 引发异常并返回
-1
失败时;返回0
论成功。这相当于python语句o.attr_name = v
.如果 v 是
NULL
,将删除该属性,但不推荐使用此功能,而赞成使用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.
比较的值 o1 和 o2 使用指定的操作 opid ,必须是
Py_LT
,Py_LE
,Py_EQ
,Py_NE
,Py_GT
或Py_GE
,对应于<
,<=
,==
,!=
,>
或>=
分别。这相当于python表达式o1 op o2
在哪里op
运算符是否与 opid . 返回比较成功时的值,或NULL
失败论。
-
int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)¶
比较的值 o1 和 o2 使用指定的操作 opid ,必须是
Py_LT
,Py_LE
,Py_EQ
,Py_NE
,Py_GT
或Py_GE
,对应于<
,<=
,==
,!=
,>
或>=
分别。返回-1
关于错误,0
如果结果是错误的,1
否则。这相当于python表达式o1 op o2
在哪里op
运算符是否与 opid .
注解
如果 o1 和 o2 是同一个物体, PyObject_RichCompareBool()
会一直回来的 1
对于 Py_EQ
和 0
对于 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 是类的实例 cls 或 cls 或0
如果没有。出错时返回-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。
-
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 与对象相对应 key 或
NULL
失败论。这相当于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
,这就像 Pythondir()
,返回当前局部变量的名称;在本例中,如果没有活动的执行帧,则NULL
返回但PyErr_Occurred()
将返回false。