特殊函数#
序列协议#
通过添加具有特殊名称的函数来实现序列协议的支持,这是通过使用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-type或object-type元素上指定布尔属性isNull或operator-bool来覆盖。