对象协议 – 抽象对象层(Python教程)(参考资料)
对象协议
- PyObject *
Py_NotImplemented NotImplemented单例,用于表示对给定类型组合没有实现操作.
Py_RETURN_NOTIMPLEMENTED- 正确处理返回
Py_NotImplemented来自一个C函数(也就是说,增加NotImplemented的引用计数并返回它).
- int
PyObject_Print( PyObject *o,文件 *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()instead.
- PyObject*
PyObject_GetAttr( PyObject *o,PyObject *attr_name) - Return value: New reference.
检索一个名为的属性attr_name来自物体o。成功时返回attributevalue,失败时返回NULL。这相当于Pythonexpression
o.attr_name.
- PyObject *
PyObject_GetAttrString( PyObject *o,const char *attr_name) - Return value: New reference.
从对象attr_name中检索名为o的属性。成功时返回attributevalue,失败时返回NULL。这相当于Pythonexpression
o.attr_name.
- PyObject *
PyObject_GenericGetAttr( PyObject *o,PyObject *name) - Return value: New reference.
通用属性getter函数,用于放入类型对象的
tp_getattro插槽。它在对象的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) - 通用属性setter和deleter函数,用于放入类型对象的
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__描述符的getter的通用实现。如果需要,它会创建字典.新版本3.3.
- int
PyObject_GenericSetDict( PyObject *o,void *context) __dict__描述符的setter的通用实现。这个实现不允许删除字典.新版本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失败时返回
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除此以外。这相当于thePython表达式o1 op o2,其中op是对应opid.
的运算符注意
如果o1和o2是同一个对象,PyObject_RichCompareBool()总会返回1for Py_EQ和0 for Py_NE.
- PyObject *
PyObject_Repr( PyObject *o) - Return value: New reference.
计算对象o的字符串表示。返回成功时的字符串表示,NULL失败了。这相当于thePython表达式
repr(o)。被打的叫repr()内置功能版本3.4更改:此函数现在包含一个调试断言,以帮助确保它不会以静默方式丢弃活动异常.
- PyObject*
PyObject_ASCII( PyObject *o) - Return value: New reference.
作为
PyObject_Repr(),计算对象的字符串表示o,butescapePyObject_Repr()与\x,\u返回的字符串中的非ASCII字符与\U逃脱。这会生成一个类似于在Python 2中由PyObject_Repr()返回的字符串。由ascii()内置函数调用.
- PyObject*
PyObject_Str( PyObject *o) - Return value: New reference.
计算对象o的字符串表示。成功时返回stringrepresentation,失败时返回NULL。这相当于thePython表达式
str(o)。由str()内置函数调用,因此,通过print()函数更改版本3.4:此函数现在包含调试断言帮助确保它不会以静默方式丢弃活动异常.
- PyObject*
PyObject_Bytes( PyObject *o) - Return value: New reference.
计算一个字节对象的表示o. NULL在失败时返回,并在成功时返回字节对象。这相当于Pythonexpression
bytes(o),当o不是整数时。与bytes(o)不同,当o是一个整数而不是零初始化的字节对象时会引发TypeError
- int
PyObject_IsSubclass(PyObject *derived,PyObject *cls) - 返回
1如果班级derived相同或派生来自班级cls,否则返回0。如果出现错误,请返回-1.如果cls是一个元组,将对cls中的每个条目进行检查。结果将是
1当至少有一张支票退回时1,否则会是0.如果cls有个
__subclasscheck__()方法,它将被调用以确定子类状态,如PEP 3119 。除此以外,derived是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__属性(必须是基类的元组).
- int
PyCallable_Check( PyObject *o) - 确定对象是否o可以调用。如果对象可以调用
1则返回0除此以外。这个函数总是成功的.
- PyObject*
PyObject_Call( PyObject *callable,PyObject *args,PyObject *kwargs) - Return value: New reference.
使用thepuple callable给出的参数调用一个可调用的Python对象args和字典给出的命名参数kwargs.
args必须不 NULL如果不需要参数,则使用空元组。如果不需要命名参数,kwargs可以NULL.
返回成功调用的结果,或NULL失败.
这相当于Python的表达式:
callable(*args, **kwargs).
- PyObject *
PyObject_CallObject( PyObject *callable,PyObject *args) - Return value: New reference.
使用thetuple callable给出的参数调用一个可调用的Python对象args。如果不需要参数,则args可以NULL.
返回成功调用的结果,或NULL失败时
这是等价的Python表达式:
callable(*args).
- PyObject *
PyObject_CallFunction( PyObject *callable,const char *format, …) - Return value: New reference.
一个可调用的Python对象callable,带有可变数量的C参数。使用
Py_BuildValue()样式格式字符串描述C参数。格式可以是NULL,表示没有提供参数.返回成功调用的结果,或者NULL失败时
这个相当于Python表达式:
callable(*args).请注意,如果你只传递
PyObject *args,PyObject_CallFunctionObjArgs()是一个更快的选择.版本3.4更改:的类型format从改变了
char *.
- PyObject *
PyObject_CallMethod(PyObject *obj,const char *name,const char *format, …) - Return value: New reference.
调用对象name的方法obj具有可变数量的Carguments。C参数用
Py_BuildValue()应该产生元组的格式字符串.格式可以是NULL,表示没有提供参数.
返回成功调用的结果,或NULL失败了
这相当于Python表达式:
obj.name(arg1, arg2, ...).请注意,如果你只传递
PyObject *args,PyObject_CallMethodObjArgs()是一个更快的替代品.更改版本3.4: name和format改变了
char *.
- PyObject *
PyObject_CallFunctionObjArgs( PyObject *callable,…,NULL ) - Return value: New reference.
调用一个可调用的Python对象callable,其变量为
PyObject*参数。参数提供为变量numberof参数后跟NULL.返回成功调用的结果,或NULL失败时
这相当于Python表达式:
callable(arg1, arg2, ...).
- PyObject *
PyObject_CallMethodObjArgs( PyObject *obj,PyObject *name,…,NULL ) - Return value: New reference.
调用Python对象的方法obj,其中方法的名称作为aPython字符串对象给出name。它使用可变数量的
PyObject*参数调用。参数以可变数量的参数提供,后跟NULL。返回成功调用的结果,或NULL失败时
- Py_hash_t
PyObject_Hash( PyObject *o) -
计算并返回对象的哈希值o。失败时,返回
-1。这相当于Python表达式hash(o).在版本3.2中更改:返回类型现在是Py_hash_t。这是一个有条件的整数,大小与Py_ssize_t.
- Py_hash_t
PyObject_HashNotImplemented( PyObject *o) - 设置一个
TypeError表示type(o)不可清洗并返回-1。此功能在存放于tp_hashslot,允许一个类型明确地向解释器指出它是不可用的.
- 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对应的类型对象。失败时,抬起
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提供序列和映射协议,则返回序列长度。出错,
-1isreturned。这相当于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.
- 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),返回一个(可能是空的)适合于object参数的字符串列表,如果有错误则返回NULL。如果参数是NULL,这就像Pythondir(),返回当前本地人的名字;在这种情况下,如果没有执行帧处于活动状态,则返回NULL但是PyErr_Occurred()将返回false.
- PyObject*
PyObject_GetIter(PyObject *o) - Return value: New reference.
这相当于Python表达式
iter(o)。它返回object参数的newiterator,如果对象已经是迭代器,则返回对象本身。如果物体不能被诱惑,则举起TypeError然后返回NULL.
评论被关闭。