2012-08-11 23 views
9

Być może głupie pytanie: w jaki sposób można określić docstring dla specjalnych funkcji, takich jak __init__ podczas pisania rozszerzenia C? Dla metod zwykłych tabela metod zawiera zapis dla docstrings. Poniższa dokumentacja wygenerowany automatycznie zostanie wyświetlony podczas próby pomocy (MyClass):Jak określić docstring dla __init__ w rozszerzeniu Python C

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

Ale to, co chcę, aby zastąpić.

Odpowiedz

1

Myślę, że najczęstszą rzeczą do zrobienia jest po prostu przyklejać definicje różnych funkcji do tp_doc i po prostu to zostawić. Możesz wtedy zrobić, jak mówi i spojrzeć na dokument twojego obiektu. Tak dzieje się w całej standardowej bibliotece.

Tak naprawdę nie ma żadnej opcji pisania __doc__ na różnych gniazdach (tp_init, etc.), ponieważ są one opakowane przez wrapper_descriptor kiedy zadzwonić PyType_Ready i docstring na wrapper_descriptor jest tylko do odczytu.

Myślę, że można pominąć użycie gniazd i dodać swoją metodę (np. __init__) do swojej MemberDefs, ale nigdy tego nie próbowałem.

+1

Wygląda na to, że tak jest. Próbowałem już wstawić \ _ \ _ init \ _ \ _ w tablicy PyMethoDef. Chociaż nie szkodzi, aby go tam umieścić, interpreter ignoruje dostarczony ciąg dokumentów. – subhacom