Вопрос

Когда я звоню

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 вокруг них, чтобы они могли поддерживать стандартные сигнатуры функций и другие функции динамического языка (такие как протокол дескриптора).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top