On Mon, Oct 08, 2018 at 01:45:01AM +1100, Chris Angelico wrote:
> On Mon, Oct 8, 2018 at 1:41 AM Marko Ristin-Kaufmann
> <marko.ris...@gmail.com> wrote:
> > (If you wonder about the use case: I'd like to dynamically generate the 
> > docstrings when functions are decorated with contracts from icontract 
> > library. Condition functions need to be parsed and re-formatted, so this is 
> > something that should be done on-demand, when the user either wants to see 
> > the help() or when the sphinx documentation is automatically generated. The 
> > docs should not inflict computational overhead during the decoration since 
> > normal course of program operation does not need pretty-printed contracts.)
> >
> 
> Have you tried just generating the docstrings at decoration time and
> applying them? By the sound of it, they won't change after that, and
> the only reason to run it later is performance... but have you
> actually measured a performance hit resulting from that?

That might work for Marko's use-case, but the problem is more general 
and I'd like to consider the broader picture. Currently instance __doc__ 
attributes are sometimes ignored by help(). Given these:

py> class X:
...     pass
...
py> a = X()
py> b = X()
py> a.__doc__ = "Hello"
py> b.__doc__ = "Goodbye"

I would expect to see the per-instance docstrings, but in 3.6 at least, 
help(a) and help(b) both give the unhelpful:


Help on X in module __main__ object:

class X(builtins.object)
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)
(END)


As per my earlier post, making the docstrings a property fails from 
help(). So I think there's some improvement here:

- fix help() so it picks up per-instance docstrings, not just the 
  class docstring;

- including the case where the docstring is a property.


-- 
Steve
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to