Multiple inheritance and __slots__

Larry Bates larry.bates at websafe.com
Thu Dec 14 16:56:05 EST 2006


jm.suresh at no.spam.gmail.com wrote:
> Simon Brunning wrote:
>> On 14 Dec 2006 05:23:33 -0800, jm.suresh at no.spam.gmail.com
>> <jm.suresh at gmail.com> wrote:
>>> Hi all,
>>> >From the google search, it seems its not possible to do the following.
>>>
>>>>>> class Test1(object):
>>> ...     __slots__ = ['a']
>>> ...
>>>>>> class Test2(object):
>>> ...     __slots__ = ['b']
>>> ...
>>>>>> class Test3(Test1,Test2):
>>> ...     __slots__ = ['c']
>>> ...
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>> TypeError: Error when calling the metaclass bases
>>>     multiple bases have instance lay-out conflict
>>>
>>> I just want to make sure that I am using only the attributes a,b and c
>>> from the instances of Test3 . Is there any other hack that could be
>>> done.
>> Difficulty with subclassing is the price you pay for abusing slots.
>> Slots are intended as a performance tweak only, to minimise the memory
>> footprint of classes of which you are going to have a great number of
>> instances.
>>
>> In short - don't do that.
> OK. But is there any other way to do what __slots__ does as a 'side
> effect' i.e. forcing me to think about the list of attributes my class
> is going to have upfront and raising error whenever I violate it. IMHO
> this is a very good thing to have even if one does not care about
> memory.
> 
> --
> Suresh
> 
>> --
>> Cheers,
>> Simon B
>> simon at brunningonline.net
>> http://www.brunningonline.net/simon/blog/
> 

Sounds a lot like you are coming from another programming language
and are trying to make Python act like it did.  Hey I did the same
thing when I first took up Python as a language.  Python is not Java
(or any other language that puts you in a straight jacket).  IMHO if
you embrace the dynacism of Python and you will be much happier
writing code in it.  Don't worry if someone will try to assign to
some attribute in your class that "is illegal".  They may be doing
if for some reason you can't fathom at the outset.

-Larry



More information about the Python-list mailing list