duncan.booth at invalid.invalid
Tue Jul 3 11:38:05 CEST 2012
Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:
> You can create instances without a __dict__ by setting __slots__:
That is a necessary but not a sufficient condition. An instance of a class
can be created without a dict only if (either you set __slots__ or you
implement it in C without a __dict__ attribute) AND none of its base
classes require a dict.
Setting __slots__ when a base class requires that its instances have a
__dict__ doesn't prevent creation of the __dict__.
> But the class itself still has a __dict__:
The class is an instance of 'type'. Instances of 'type' require a dict
therefore every class requires a dict. Except of course for old style
classes in Python 2.x but they have a __dict__ too.
Also you cannot create a subclass of 'type' with non-empty slots (it throws
a type error "nonempty __slots__ not supported for subtype of 'type'").
However I don't think that's really relevant as even if they did allow you
to use __slots__ it wouldn't prevent the creation of a __dict__ for the
'type' base class.
> I don't have a use-case for this. But I have some code which assumes
> that every class will have a __dict__, and I wonder whether that is a
> safe assumption.
I believe so.
Duncan Booth http://kupuguy.blogspot.com
More information about the Python-list