tp_methods
:
Необязательный указатель на статический массив с окончанием NULL из PyMethodDef
структур, объявляющий обычные методы этого типа.
Для каждой записи в массиве запись добавляется в словарь типа (см. tp_dict
ниже), содержащий дескриптор метода.
Это поле не наследуется подтипами (методы наследуются через другой механизм).
Другими словами, это встроенные методы, прикрепленные к классу модулем расширения, который его создал.
Для класса, построенного на Python, нет встроенных методов, и нет модуля расширения, который его создал, поэтому он всегда будет либо NULL
, либо пустым.
То, что вы хотите сделать, это то же самое, что вы делаете в Python:
- Либо посмотрите в диктовку класса (к которой вы можете получить доступ через
tp_dict
), либо
- Вызовите метод, например
dir
или inspect.getmembers
(так же, как вы вызываете любой другой код Python).
Конечно, вы получаете все атрибуты класса (в зависимости от того, что вы делаете, также, возможно, все унаследованные атрибуты), так что если вам нужны только методы , вам нужно отфильтровать его. Но вы делаете это так же, как и в Python.
Поскольку «метод» является своего рода двусмысленным термином (должен ли он включать методы класса и статические методы? Как насчет оболочек, которые действуют как функции, когда связаны как методы, но не являются функциями? с тем правилом, которое вы хотите отфильтровать, и примените его так же, как с Python. (Некоторые вещи, такие как PyCallable_Check
, имеют специальную поддержку C API; во всем остальном вы будете выполнять проверку подкласса или вызывать функцию Python.)