Domanda

Quando chiamo

help(Mod.Cls.f)

(Mod è un modulo di estensione C), ottengo l'output

Help on method_descriptor:

f(...)
    doc_string

Cosa devo fare affinché l'output della guida sia nel formato

Help on method f in module Mod:

f(x, y, z)
    doc_string

come è per random.Random.shuffle, per esempio?

La mia voce PyMethodDef è attualmente:

{ "f", f, METH_VARARGS, "doc_string" }
È stato utile?

Soluzione

Non puoi. Il modulo inspect, che è quello che usano 'pydoc' e 'help ()', non ha modo di capire quale sia la firma esatta di una funzione C. Il meglio che puoi fare è quello che fanno le funzioni integrate: includi la firma nella prima riga del docstring:

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

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

...

Il motivo per cui la docstring di random.shuffle sembra " corretto " è che non è una funzione C. È una funzione scritta in Python.

Altri suggerimenti

La risposta di Thomas è giusta, ovviamente.

Aggiungo semplicemente che molti moduli di estensione C hanno un "wrapper" Python intorno a loro in modo che possano supportare firme di funzioni standard e altre caratteristiche del linguaggio dinamico (come il protocollo descrittore).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top