OO-programming question

Alex Martelli aleaxit at yahoo.com
Mon Sep 4 12:18:44 EDT 2000


"Rainer Deyke" <root at rainerdeyke.com> wrote in message
news:dJBs5.122703$6y5.82311962 at news2.rdc2.tx.home.com...
> "Alex Martelli" <aleaxit at yahoo.com> wrote in message
> news:8ou9i4029q1 at news2.newsguy.com...
> > def allbases(aclass, baselist=[]):
> >     baselist.append(aclass)
> >     bases=aclass.__bases__
> >     for base in bases:
> >         allbases(base, baselist)
> >     return baselist
> >
> > def allclasses(aninstance):
> >     return allbases(aninstance.__class__)
>
> This will break the second time allclasses is called.  Don't use mutable
> default args unless you really know what you're doing.

Ooops, you're right -- the baselist is never cleared when
a call of allbases from allclasses is finished, but rather
stays around, as 'state' of the allbases function, and
keeps being appended to.

Removing the '=[]' from the definition of allbases, and
changing the body of allclasses to:

    return allbases(aninstance.__class__,[])

fixes the bug, of course.


Alex






More information about the Python-list mailing list