<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 15, 2013 at 3:45 AM, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Mon, Apr 15, 2013 at 8:17 PM, Maciej Fijalkowski <<a href="mailto:fijall@gmail.com">fijall@gmail.com</a>> wrote:<br>


> On Mon, Apr 15, 2013 at 9:56 AM, David Lam <<a href="mailto:david.k.lam1@gmail.com">david.k.lam1@gmail.com</a>> wrote:<br>
</div><div class="im">>> I tried to find an example in the source which addressed this, but<br>
>> found that the docstrings in similar cases to be largely duplicated.<br>
>> For instance, _datetimemodule.c, decimal_.c and _json.c all seem to<br>
>> exhibit this docstring copy and pastage.<br>
>><br>
><br>
> Hi<br>
><br>
> NumPy uses a hack to deal with this problem. It has a small C function<br>
> that would mutate the docstring under your feet. Personally I would<br>
> prefer some sort of tagging in C source that can copy-paste stuff<br>
> instead, honestly. It does sound like a good idea to share docstrings.<br>
> Seems also relatively trivial to write a test that checks that they<br>
> stay the same.<br>
<br>
</div>It's actually even worse than that - if a subclass overrides a method,<br>
it has to completely duplicate the docstring, even if the original<br>
docstring was still valid. So, for example, ABCs can't provide<br>
docstrings for abstract methods.<br>
<br>
So yeah, we end up not only duplicating between the C and Python<br>
versions, but sometimes we end up duplicating between different<br>
subclasses as well (datetime.datetime, datetime.date and datetime.time<br>
are the worst offenders here).<br>
<br>
I like the idea of at least adding a test that checks the Python<br>
docstring and the C docstring are the same in the duplicated cases -<br>
that should be a lot easier than adjusting the build process to let<br>
the C version use the Python docstrings or vice-versa (even the<br>
argument clinic DSL in PEP 434 doesn't try to achieve that - it just<br>
tries to cut down on the duplication within the C code itself).<br></blockquote><div><br></div><div>Would it make sense to think about adding this in the scope of the argument clinic work, or is it too unrelated? This seems like a commonly needed thing for large parts of the stdlib (where the C accelerator overrides Python code).<br>

<br>Eli<br><br></div><div><br> </div></div></div></div>