[Python-Dev] slots, properties, descriptors, and pydoc (original) (raw)

Guido van Rossum guido at python.org
Mon Apr 19 11:10:59 EDT 2004


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/)



More information about the Python-Dev mailing list