Author: | Wojciech Muła |
---|---|
Added on: | 2011-04-08 |
If a class has to support standard len() function or operator in, then must be a sequence-like. This requires a variable of type PySequenceMethods, that store addresses of proper functions. Finally the address of this structure have to be assigned to tp_as_sequence member of the main PyTypeObject variable.
Here is a sample code:
static PySequenceMethods class_seq; static PyTypeObject class_type_dsc = { ... }; ssize_t classmeth_len(PyObject* self) { if (not error) return sequence_size; else return -1; } int classmeth_contains(PyObject* self, PyObject* value) { if (not error) { if (value in self) return 1; else return 0; } else return -1; } PyMODINIT_FUNC PyInit_module() { class_seq.sq_length = classmeth_len; class_seq.sq_contains = classmeth_contains; class_type_dsc.tp_as_sequence = &class_seq; ... }