__slots__ in derived class
Kay Schluehr
kay.schluehr at gmx.net
Wed Mar 15 08:07:50 EST 2006
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
More information about the Python-list
mailing list