Дополнительные функции и "справка"
Вопрос
Когда я звоню
help(Mod.Cls.f)
(Mod - это модуль расширения C), я получаю выходные данные
Help on method_descriptor: f(...) doc_string
Что мне нужно сделать, чтобы вывод справки имел вид
Help on method f in module Mod: f(x, y, z) doc_string
как это делается для random.Random.shuffle, например?
Моя запись PyMethodDef в данный момент находится:
{ "f", f, METH_VARARGS, "doc_string" }
Решение
Ты не можешь.Модуль inspect, который используют 'pydoc' и 'help()', не имеет способа выяснить, какова точная сигнатура функции C.Лучшее, что вы можете сделать, это то, что делают встроенные функции:включите подпись в первую строку строки документа:
>>> help(range)
Help on built-in function range in module __builtin__:
range(...)
range([start,] stop[, step]) -> list of integers
...
Причина, по которой строка документации random.shuffle выглядит "правильной", заключается в том, что это не функция C.Это функция, написанная на Python.
Другие советы
Ответ Томаса, конечно, точен.
Я бы просто добавил, что многие модули расширения C имеют "оболочку" Python вокруг них, чтобы они могли поддерживать стандартные сигнатуры функций и другие функции динамического языка (такие как протокол дескриптора).