对象协议 – 抽象对象层(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()
总会返回1
for 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_hash
slot,允许一个类型明确地向解释器指出它是不可用的.
- 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提供序列和映射协议,则返回序列长度。出错,
-1
isreturned。这相当于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.
评论被关闭。