Статические и классовые методы можно определить в tp_methods
, добавив METH_STATIC
или METH_CLASS
в поле ml_flags
структуры PyMethodDef
. Это эквивалентно @staticmethod
и @classmethod
декораторам.
Первый параметр метода, который обычно является указателем экземпляра, будет NULL
для статических методов и PyTypeObject*
для методов класса.
http://docs.python.org/c-api/structures.html#PyMethodDef
Атрибуты класса можно добавить, установив tp_dict
в словарь с этими атрибутами перед вызовом PyType_Ready()
(в функции инициализации вашего модуля). В качестве альтернативы tp_dict
можно оставить как NULL
, в этом случае PyType_Ready()
создаст для вас дикт. Атрибуты могут быть добавлены к этому требованию.
http://docs.python.org/c-api/typeobj.html#tp_dict
Для вычисляемых атрибутов класса требуется класс дескриптора, точно так же, как в Python. Экземпляр дескриптора затем должен быть добавлен в tp_dict
, как и с другими атрибутами класса.