указать статические переменные в классе Python в C ++ - PullRequest
4 голосов
/ 05 ноября 2011

Как можно указать статический метод или переменную в классе Python в CPython C ++?

В структуре PyTypeObject, tp_getset, tp_methods, tp_members, похоже, принимают экземпляр класса.

Большое спасибо, Роб.

1 Ответ

2 голосов
/ 05 ноября 2011

Статические и классовые методы можно определить в 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, как и с другими атрибутами класса.

...