Object Protocol

PyObject* Py_NotImplemented

NotImplemented单例,用于表示未对给定类型组合实现操作。

Py_RETURN_NOTIMPLEMENTED

正确处理从C函数内返回Py_NotImplemented(即增加NotImplemented的引用计数并返回)。

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

打印对象o,文件fp在错误时返回-1flags参数用于启用某些打印选项。当前支持的唯一选项是Py_PRINT_RAW;如果给定,写入对象的str(),而不是repr()

int PyObject_HasAttr(PyObject *o, PyObject *attr_name)

如果o具有属性attr_name,则返回1,否则返回0这等同于Python表达式hasattr(o, attr_name)此函数总是成功。

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

如果o具有属性attr_name,则返回1,否则返回0这等同于Python表达式hasattr(o, attr_name)此函数总是成功。

PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)
返回值:新引用。

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

PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)
返回值:新引用。

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

PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)

通用属性getter函数,用于放入类型对象的tp_getattro槽。它在对象的MRO中的类的字典中查找描述器,以及在对象的__dict__(如果存在)中的属性。Implementing Descriptors中所述,数据描述器优先于实例属性,而非数据描述器不优先。否则,会引发AttributeError

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

将对象o的名为attr_name的属性值设置为值v。引发异常并在故障时返回-1;成功返回0这相当于Python语句o.attr_name = v

如果vNULL,那么将删除该属性,但是此功能已弃用,有利于使用PyObject_DelAttr()

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

将对象o的名为attr_name的属性值设置为值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)

删除对象o的名为attr_name的属性。失败时返回-1这等效于Python语句del o.attr_name

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

删除对象o的名为attr_name的属性。失败时返回-1这等效于Python语句del o.attr_name

PyObject* PyObject_GenericGetDict(PyObject *o, void *context)

一个__dict__描述器的getter的通用实现。如果需要,它创建字典。

版本3.3中的新功能。

int PyObject_GenericSetDict(PyObject *o, void *context)

一个__dict__描述器的设置器的通用实现。此实现不允许删除字典。

版本3.3中的新功能。

PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
返回值:新引用。

Compare the values of o1 and o2 using the operation specified by opid, which must be one of Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT, or Py_GE, corresponding to <, <=, ==, !=, >, or >= respectively. 这等效于Python表达式o1 op o2,其中op对应于opid的操作符号。返回成功时的比较值,或失败时返回NULL

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

Compare the values of o1 and o2 using the operation specified by opid, which must be one of Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT, or Py_GE, corresponding to <, <=, ==, !=, >, or >= respectively. 在错误时返回-1,如果结果为假则返回0,否则返回1这等效于Python表达式o1 op o2,其中op对应于opid的操作符号。

注意

If o1 and o2 are the same object, PyObject_RichCompareBool() will always return 1 for Py_EQ and 0 for Py_NE.

PyObject* PyObject_Repr(PyObject *o)
返回值:新引用。

计算对象o的字符串表示。在失败时返回成功时的字符串表示,NULL这相当于Python表达式repr(o)repr()内建函数调用。

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

PyObject* PyObject_ASCII(PyObject *o)

作为PyObject_Repr(),计算对象o的字符串表示,但转义PyObject_Repr()返回的字符串中的非ASCII字符\x\u\U转义。这将生成一个类似于Python 2中PyObject_Repr()返回的字符串。ascii()内建函数调用。

PyObject* PyObject_Str(PyObject *o)
返回值:新引用。

计算对象o的字符串表示。在失败时返回成功时的字符串表示,NULL这相当于Python表达式str(o)str()内建函数调用,因此由print()函数调用。

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

PyObject* PyObject_Bytes(PyObject *o)

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

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)

如果类派生与类cls相同或派生,则返回1,否则返回0如果出现错误,请返回-1

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

如果cls__subclasscheck__()方法,则将调用它以确定子类状态,如 PEP 3119否则,如果它是直接或间接子类,则派生cls的子类,即包含在cls.__mro__中。

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

int PyObject_IsInstance(PyObject *inst, PyObject *cls)

Return 1 if inst is an instance of the class cls or a subclass of cls, or 0 if not. 出错时,返回-1并设置异常。

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

如果cls__instancecheck__()方法,则将调用它以确定子类状态,如 PEP 3119否则,instcls的实例,如果它的类是cls的子类。

实例inst可以通过使用__class__属性来覆盖被认为是其类的内容。

对象cls可以通过拥有__bases__属性(必须是基类的元组)来覆盖它是否被认为是一个类及其基类。

int PyCallable_Check(PyObject *o)

确定对象o是否可调用。如果对象是可调用的,返回1,否则返回0此函数总是成功。

PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw)
返回值:新引用。

调用一个可调用的Python对象callable_object,使用元组args给出的参数,以及字典kw给出的命名参数。如果不需要命名参数,则kw可以是NULLargs不能为NULL,如果不需要参数,请使用空元组。返回成功时调用的结果,或失败时返回NULL这等同于Python表达式callable_object(* args, ** kw)

PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)
返回值:新引用。

调用可调用的Python对象callable_object,其中参数由元组args给出。如果不需要参数,则args可以是NULL返回成功时调用的结果,或失败时返回NULL这相当于Python表达式callable_object(*args)

PyObject* PyObject_CallFunction(PyObject *callable, const char *format, ...)
返回值:新引用。

调用可调用的Python对象可调用,具有可变数量的C参数。C参数使用Py_BuildValue()样式格式字符串描述。格式可以是NULL,表示没有提供参数。返回成功时调用的结果,或失败时返回NULL这相当于Python表达式callable(*args)请注意,如果您只传递PyObject *参数,PyObject_CallFunctionObjArgs()

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

PyObject* PyObject_CallMethod(PyObject *o, const char *method, const char *format, ...)
返回值:新引用。

使用可变数量的C参数调用对象o的名为方法的方法。C参数由Py_BuildValue()格式字符串描述,应该产生一个元组。格式可以是NULL,表示没有提供参数。返回成功时调用的结果,或失败时返回NULL这相当于Python表达式o.method(args)请注意,如果您只传递PyObject *参数,PyObject_CallMethodObjArgs()

在版本3.4中更改: 方法格式的类型从char

PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)
返回值:新引用。

调用可调用的Python对象可调用,变量编号为PyObject*参数。参数以可变数目的参数形式提供,后面跟NULL返回成功时调用的结果,或失败时返回NULL

PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)
返回值:新引用。

调用对象o的方法,其中方法的名称作为名称中的Python字符串对象给出。它使用可变数目的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插槽中时会收到特殊处理,允许类型向解释器显式指示其不可哈希。

int PyObject_IsTrue(PyObject *o)

如果对象o被认为是真,则返回1,否则认为0这等同于Python表达式而不是 而不是 o失败时,返回-1

int PyObject_Not(PyObject *o)

如果对象o被认为是真,则返回0,否则返回1这等同于Python表达式而不是 o失败时,返回-1

PyObject* PyObject_Type(PyObject *o)
返回值:新引用。

o为非NULL时,返回与对象o对象类型对应的类型对​​象。发生故障时,引发SystemError并返回NULL这相当于Python表达式type(o)此函数会递增返回值的引用计数。实际上没有理由使用此函数而不是通用表达式o->ob_type,它返回类型PyTypeObject*的指针,除非需要增加的引用计数。

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

如果对象o的类型为类型或子类型类型,则返回true。这两个参数必须为非NULL

Py_ssize_t PyObject_Length(PyObject *o)
Py_ssize_t PyObject_Size(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, 默认值)

版本3.4中的新功能。

PyObject* PyObject_GetItem(PyObject *o, PyObject *key)
返回值:新引用。

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

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

将对象映​​射到值v。引发异常并在故障时返回-1;成功返回0这等效于Python语句o [key] = v

int PyObject_DelItem(PyObject *o, PyObject *key)

o中删除的映射。失败时返回-1这相当于Python语句del o [key]

PyObject* PyObject_Dir(PyObject *o)
返回值:新引用。

这等效于Python表达式dir(o),返回适用于对象参数的字符串列表(可能为空),如果存在错误,则返回NULL如果参数是NULL,这就像Python dir(),返回当前局部变量的名称;在这种情况下,如果没有执行帧是活动的,则返回NULL,但PyErr_Occurred()将返回false。

PyObject* PyObject_GetIter(PyObject *o)
返回值:新引用。

这相当于Python表达式iter(o)它返回一个新的迭代器对象参数,或对象本身,如果对象已经是一个迭代器。如果对象不能被迭代,则引发TypeError并返回NULL