Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #7396
| References | <BANLkTin3FGoxwvH2VDOb4OhAWi2Ea3K-pA@mail.gmail.com> <4DF1FA8B.2020609@tim.thechases.com> <BANLkTikqr1s0OVV15Pi4Gz4KPJxtHVASfA@mail.gmail.com> <BANLkTim9edL6pDEgQohGfKn8j3q-NKu3Rw@mail.gmail.com> |
|---|---|
| Date | 2011-06-10 12:58 -0600 |
| Subject | Re: how to inherit docstrings? |
| From | Eric Snow <ericsnowcurrently@gmail.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.95.1307732308.11593.python-list@python.org> (permalink) |
On Fri, Jun 10, 2011 at 11:26 AM, Ian Kelly <ian.g.kelly@gmail.com> wrote: > Everybody always focuses so much on properties and forgets that you > can also just write your own descriptors. > I'm so glad that you pointed this out. I totally forgot that properties simply returned themselves if not called on the instance. You are right about a custom descriptor. -eric >>>> class DocDescriptor(object): > ... def __get__(self, instance, owner): > ... return getattr(owner, "_mydoc", None) > ... >>>> class Meta(type): > ... def __init__(cls, name, bases, d): > ... super(Meta, cls).__init__(name, bases, d) > ... cls.__doc__ = DocDescriptor() > ... >>>> class X(object): > ... __metaclass__ = Meta > ... >>>> X.__doc__ >>>> X().__doc__ >>>> X._mydoc = 'test' >>>> X.__doc__ > 'test' >>>> X().__doc__ > 'test' >>>> class Derived(X): pass > ... >>>> Derived.__doc__ > 'test' >>>> Derived().__doc__ > 'test' > > There you go, a metaclass that adds a __doc__ descriptor that can be > inherited (thanks to the metaclass), can be accessed from either the > class or the instance (thanks to the descriptor), and can easily be > modified to generate the doc string dynamically at call-time if > desired. > > Cheers, > Ian >
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: how to inherit docstrings? Eric Snow <ericsnowcurrently@gmail.com> - 2011-06-10 12:58 -0600
csiph-web