Pergunta

Quando eu chamar

help(Mod.Cls.f)

(Mod é um módulo de extensão C), recebo a saída

Help on method_descriptor:

f(...)
    doc_string

O que eu preciso fazer para que a saída de ajuda é da forma

Help on method f in module Mod:

f(x, y, z)
    doc_string

como é para random.Random.shuffle, por exemplo?

entrada My PyMethodDef é atualmente:

{ "f", f, METH_VARARGS, "doc_string" }
Foi útil?

Solução

Você não pode. O módulo inspecionar, que é o que 'pydoc' e 'help ()' use, não tem nenhuma maneira de descobrir o que a assinatura exata de uma função C é. O melhor que você pode fazer é o que as funções internas fazer: incluir a assinatura na primeira linha da docstring:

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

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

...

docstring A razão de random.shuffle parece "correta" é que ele não é uma função C. É uma função escrita em Python.

Outras dicas

A resposta de Thomas é certo, é claro.

Gostaria apenas de acrescentar que muitos módulos de extensão C tem um "wrapper" Python em torno deles para que eles possam suportar assinaturas de função padrão e outros recursos de linguagem dinâmica (como o protocolo de descritor).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top