changing the List's behaviour?
Peter Otten
__peter__ at web.de
Wed Jul 30 11:36:12 EDT 2003
Heather Coppersmith wrote:
>> class DefaultList(list):
>> def __init__(self, sequence=[], default=None):
list.init(self, sequence)
>
> That's asking for trouble. That mutable default argument for
> sequence is evaluated at class definition-time, and all instances
> of DefaultList created without a sequence argument will end up
> sharing one list.
>
> Do this instead:
>
> class DefaultList( list ):
> def __init__( self, sequence = None, default = None ):
> if sequence is None:
> sequence = [ ]
>
>> list.__init__(self, sequence)
I can see the trouble only if the sequence argument is used to initialize a
member, e.g.
def __init__(self, seq=[]):
self.seq = seq # bad, multiple instances may share one list
However, in the DefaultList case, sequence is never changed.
So I don't see what can go wrong. Am I overlooking something?
- Peter
More information about the Python-list
mailing list