[Python-Dev] slots, properties, descriptors, and pydoc

John Belmonte john at neggie.net
Thu Apr 22 08:15:22 EDT 2004


Guido van Rossum wrote:
> But that currently doesn't work.  Tbe most future-proof solution would
> be to put some kind of object in the dict values whose attributes can
> guide various metaclasses.  Perhaps:
> 
> class slotprop(object):
>     def __init__(self, **kwds):
>         self.__dict__.update(kwds)
> 
> class C(object):
>     __slots__ = {'slot1': slotprop(doc="this is the docstring"),
>                  'slit2': slotprop('doc="another one")}

Wouldn't it be just as future-proof to make __slots__ a list of bare 
slot names or objects?  One advantage is that slot names don't have to 
be carried around externally to the objects.  Moreover, using standard 
attribute names like __name__ and __doc__ will make the solution more 
future-proof.

The default metaclass will handle __slots__ along these lines:

     for item in obj.__slots__:
         if isinstance(item, StringTypes):
             slot_name, slot_doc = item, None
         else:
             slot_name = item.__name__
             slot_doc = getattr(item, '__doc__', None)

In that way, the default metaclass does not impose any restrictions on 
what the slot objects are.

Example usage:

     class MySlot(object):
         def __init__(self, name, doc=None):
             self.__name__ = name
             self.__doc__ = doc

     class C(object):
         __slots__ = ['slot1',
                      MySlot('slot2', 'this is the docstring')]


-John


-- 
http:// ift ile.org/



More information about the Python-Dev mailing list