Schüle Daniel wrote: > consider this code > > >>> class A(object): > ... def __init__(self): > ... self.a = 1 > ... self.b = 2 > ... > >>> class B(A): > ... __slots__ = ["x","y"] > ... > >>> b=B() > >>> b.a > 1 > >>> b.b > 2 > >>> b.x = 100 > >>> b.y = 100 > >>> b.z = 100 > > no exception here > does __slots__ nothing when used in derived classes?
__slots__ is intended as a way to reduce memory consumption. It was never intended as a protection mechanism. The slots which are available in a class only add to the attributes available in the base class. You can hide base class slots by defining a slot of the same name, but you cannot remove them. Your base class has a __dict__ attribute and therefore all instances of the base class or any derived classes also have a __dict__ attribute. -- http://mail.python.org/mailman/listinfo/python-list