__slots__ in derived class
Hello, 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? class Z(object): ... __slots__ = [x,y] ... z=Z() z.x = 100 z.y = 100 z.z = 100 Traceback (most recent call last): File stdin, line 1, in ? AttributeError: 'Z' object has no attribute 'z' here it works like expected Regards, Daniel -- http://mail.python.org/mailman/listinfo/python-list
Re: __slots__ in derived class
Schüle Daniel wrote: Hello, 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? class Z(object): ... __slots__ = [x,y] ... z=Z() z.x = 100 z.y = 100 z.z = 100 Traceback (most recent call last): File stdin, line 1, in ? AttributeError: 'Z' object has no attribute 'z' here it works like expected Regards, Daniel I would expect that A has to define its own __slots__ too. The following code should work as expected and makes also sense with the memory optimization considerations that motivated introduction of the __slots__ variable. class A(object): __slots__ = [a,b] def __init__(self): self.a = 1 self.b = 2 class B(A): __slots__ = [x,y] Kay -- http://mail.python.org/mailman/listinfo/python-list
Re: __slots__ in derived class
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
Don't use __slots__ (was Re: __slots__ in derived class)
In article [EMAIL PROTECTED], =?ISO-8859-1?Q?Sch=FCle_Daniel?= [EMAIL PROTECTED] wrote: does __slots__ nothing when used in derived classes? Short answer: don't use __slots__ until you're comfortable writing metaclasses and decorators. __slots__ are a performance hack strictly for advanced users, and if you think you need them, you probably don't. -- Aahz ([EMAIL PROTECTED]) * http://www.pythoncraft.com/ 19. A language that doesn't affect the way you think about programming, is not worth knowing. --Alan Perlis -- http://mail.python.org/mailman/listinfo/python-list