[Python-ideas] Dynamic getting of __doc__ of a function
rosuav at gmail.com
Sun Oct 7 11:26:06 EDT 2018
On Mon, Oct 8, 2018 at 2:14 AM Steven D'Aprano <steve at pearwood.info> wrote:
> 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:
Each of them is actually giving help(X). So having that respect *any*
per-instance information first means changing it so help(inst) is
different from help(cls).
> 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.
Which are really the same thing - having help() care about the actual
instance, not the type.
Currently, it works if you put a property on the metaclass:
>>> class mX(type):
... def __doc__(self):
... return "Docstring"
>>> class X(metaclass=mX): pass
Maybe what we really need here is a convenient way to create class properties.
I know this has been discussed before, though I can't find a
discussion thread right now.
More information about the Python-ideas