[Python-Dev] __slots__ and default values

Guido van Rossum guido@python.org
Tue, 13 May 2003 09:57:46 -0400


> Was there a reason that __slots__ makes initialized
> variables read-only?  It would be useful to have
> overridable default values (even if it entailed copying
> them into an instance's slots):
> 
> class Pane(object):
>     __slots__ = ('background', 'foreground', 'size', 'content')
>     background = 'black'
>     foreground = 'white'
>     size = (80, 25)
> 
> p = Pane()
> p.background = 'light blue'     # override the default
> assert p.foreground == 'white' # other defaults still in-place

You can't do that.  The class variable 'background' overrides the
descriptor created by __slots__.  background now appears read-only
because there is no instance dict.

--Guido van Rossum (home page: http://www.python.org/~guido/)