Guido van Rossum wrote:
Anything can be done using metaclasses. __slots__ is not special once the class exists -- it is a set of instructions for the default metaclass to create a specific set of descriptors (and associated storage). Another metaclass could use a different convention (although it may have to set __slots__ to let the base metaclass create the associated storage slots).
My original proposal was to use __slots__ dict values for docstrings in the default metaclass. You said you'd rather not do that because different metaclasses may want to use the dict value for different purposes. But from what you've explained, metaclasses are free to interpret the value of __slots__ in any way they choose. Metaclasses built on top of the default metaclass could translate their __slots__ value to the __slots__ I proposed.
Yes, but *if* the default metaclass assumed a dict contained only docstrings, this would be the standard usage, and it would be confusing (and sometimes incompatible) if a custom metaclass had a different interpretation. As long as the default metaclass doesn't have any particular interpretation for the values in the dict, custom metaclasses can do what they like.
Are optional tuples any better? This wouldn't preclude use of dict values for something else.
class Foo(object): __slots__ = [ 'slot1', ('slot2', 'description'), ('slot3', """description ...continued"""), ]
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")} --Guido van Rossum (home page: http://www.python.org/~guido/)