Special functions¶
Sequence Protocol¶
Support for the sequence protocol is achieved adding functions with special names, this is done using the add-function tag.
The special function names are:
Function name
Parameters
Return type
CPython equivalent
__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
You just need to inform the function name to the add-function tag, without any parameter or return type information, when you do it, Shiboken will create a C function with parameters and return type defined by the table above.
The function needs to follow the same semantics of the CPython equivalent function, the only way to do it is using the inject-code tag.
A concrete example how to add sequence protocol support to a class can be found
on shiboken tests, more precisely in the definition of the Str class in
tests/samplebinding/typesystem_sample.xml
.
Bool Cast¶
Implementing bool casts enables using values which have a concept of validity
in boolean expressions. In C++, this is commonly implemented as
operator bool() const
. In Qt, relevant classes have a
bool isNull() const
function.
In Python, the function __bool__
is used for this. shiboken can generate
this functions depending on the command line options
–use-operator-bool-as-nb_nonzero
and –use-isnull-as-nb_nonzero,
which can be overridden by specifying the boolean attributes
isNull or operator-bool on the value-type or object-type
elements in typesystem XML.
© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.