特殊函数#

序列协议#

通过添加具有特殊名称的函数来实现序列协议的支持,这是通过使用add-function标签完成的。

特殊函数的名称是

函数名

参数

返回类型

CPython等效

__len__

PyObject* self

Py_ssize_t

PySequence_Size

__getitem__

PyObject* self, Py_ssize_t _i

PyObject*

PySequence_GetItem

__setitem__

PyObject* self, Py_ssize_t _i, PyObject* _value

int

PySequence_SetItem

__contains__

PyObject* self, PyObject* _value

int

PySequence_Contains

__concat__

PyObject* self, PyObject* _other

PyObject*

PySequence_Concat

您只需将函数名通知给add-function标签,无需任何参数或返回类型信息,当您这样做时,Qt for Python将创建一个由上述表格定义参数和返回类型的C函数。

函数需要遵循与CPython等效函数相同的语义,唯一的实现方法是使用inject-code标签。

有关如何将序列协议支持添加到类的具体示例,请参阅Shiboken测试,特别是tests/samplebinding/typesystem_sample.xml中Str类的定义。

布尔类型转换#

实现布尔类型转换可以使在布尔表达式中使用具有有效概念的值。在C++中,这通常作为operator bool() const实现。在Qt中,相关类有一个bool isNull() const函数。

在Python中,使用__bool__函数来实现此功能。Shiboken可以根据命令行选项–use-operator-bool-as-nb-bool–use-isnull-as-nb-bool生成此函数,这些选项可以通过在类型系统XML中的value-typeobject-type元素上指定布尔属性isNulloperator-bool来覆盖。