To convert a function using$_{METH_NOARGS}$ , just don’t specify any arguments. You can still use a self converter, a return converter, and specify a $_{type}$argument to the object converter for $_{METH_O}$. You can convert tp_new and tp_init functions. Just name them __new__ or __init__ as appropriate. Notes: It can be inconvenient to have Clinic’s output interspersed with your conventional hand-edited C code. Luckily, Clinic is configurable: you can buffer up its output for printing later (or earlier!), or write its output to a separate file. You can also add a prefix or suffix to every line of Clinic’s generated output. While changing Clinic’s output in this manner can be a boon to readability, it may result in Clinic code using types before they are defined, or your code attempting to use Clinic-generated code before it is defined. These problems can be easily solved by rearranging the declarations in your file, or moving where Clinic’s generated code goes. (This is why the default behavior of Clinic is to output everything into the current block; while many people consider this hampers readability, it will never require rearranging your code to fix definition-before-use problems.) Let’s start with defining some terminology: docstring_prototype docstring_definition methoddef_define impl_prototype parser_prototype parser_definition impl_definition All the names are of the form$_{"<a>_<b>"}$ , where$_{"<a>"}$ is the semantic object represented (the parsing function, the impl function, the docstring, or the methoddef structure) and$_{"<b>"}$ represents what kind of statement the field is. Field names that end in$_{"_prototype"}$ represent forward declarations of that thing, without the actual body/data of the thing; field names that end in "_definition" represent the actual definition of the thing, with the body/data of the thing. ($_{"methoddef"}$ is special, it’s the only one that ends with$_{"_define"}$ , representing that it’s a preprocessor #define.) 19 4.18 tp_new and tp_init functions • The function name generated for __new__ doesn’t end in __new__ like it would by default. It’s just the name of the class, converted into a valid C identifier. • No PyMethodDef #define is generated for these functions. • __init__ functions return int , not PyObject * . • Use the docstring as the class docstring. • Although$_{__new__}$ and$_{__init__}$ functions must always accept both the$_{args}$and$_{kwargs}$objects, when converting you may specify any signature for these functions that you like. (If your function doesn’t support keywords, the parsing function generated will throw an exception if it receives any.) field A field, in this context, is a subsection of Clinic’s output. For example, the$_{#define}$for the$_{PyMethodDef}$ structure is a field, called$_{methoddef_define}$. Clinic has seven different fields it can output per function definition: destination A destination is a place Clinic can write output to. There are five built-in destinations: $_{block}$The default destination: printed in the output section of the current Clinic block. $_{buffer}$A text buffer where you can save text for later. Text sent here is appended to the end of any existing text. It’s an error to have any text left in the buffer when Clinic finishes processing a file. 4.19 Changing and redirecting Clinic’s output