2012-08-11 14 views
9

Forse una domanda stupida: come si può specificare docstring per funzioni speciali come __init__ quando si scrive un'estensione C? Per i metodi ordinari, la tabella dei metodi dispone di docstring. La seguente documentazione generata automaticamente viene visualizzato quando si tenta di aiuto (MyClass):Come specificare docstring per __init__ nell'estensione Python

__init__(...) 
     x.__init__(...) initializes x; see help(type(x)) for signature 

Ma questo è quello che voglio ignorare.

risposta

1

Penso che la cosa più comune da fare sia semplicemente applicare le definizioni per le varie funzioni in tp_doc e lasciarlo a quello. Puoi quindi fare come dice e guardare il documento del tuo oggetto. Questo è ciò che accade in tutta la libreria standard.

In realtà non hanno alcuna possibilità di scrivere __doc__ sui vari slot (tp_init, ecc) perché sono avvolti da un wrapper_descriptor quando si chiama PyType_Ready, e il docstring su un wrapper_descriptor è di sola lettura.

Penso che sia possibile saltare utilizzando gli slot e aggiungere il metodo (ad esempio __init__) al numero MemberDefs, ma non l'ho mai provato.

+1

Sembra che sia così. Avevo già provato a mettere \ _ \ _ init \ _ \ _ nell'array PyMethoDef. Mentre non fa alcun danno metterlo lì, l'interprete ignora la stringa doc che ho fornito. – subhacom