Pregunta

Cuando llamo

help(Mod.Cls.f)

(Mod es un módulo de extensión C), obtengo el resultado

Help on method_descriptor:

f(...)
    doc_string

¿Qué debo hacer para que el resultado de la ayuda sea del formulario

Help on method f in module Mod:

f(x, y, z)
    doc_string

como para random.Random.shuffle, por ejemplo?

La entrada de Mi PyMethodDef es actualmente:

{ "f", f, METH_VARARGS, "doc_string" }
¿Fue útil?

Solución

No puedes. El módulo de inspección, que es lo que usan 'pydoc' y 'help ()', no tiene forma de averiguar cuál es la firma exacta de una función en C. Lo mejor que puede hacer es lo que hacen las funciones integradas: incluir la firma en la primera línea de la cadena de documentos:

>>> help(range)
Help on built-in function range in module __builtin__:

range(...)
    range([start,] stop[, step]) -> list of integers

...

La cadena de documentos de random.shuffle se ve " correcta " es que no es una función de C. Es una función escrita en Python.

Otros consejos

La respuesta de Thomas es correcta, por supuesto.

Simplemente agregaría que muchos módulos de extensión C tienen un envoltorio de Python " " alrededor de ellos para que puedan admitir firmas de funciones estándar y otras funciones de lenguaje dinámico (como el protocolo del descriptor).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top