Overriding list.__new__
Michele Simionato
mis6 at pitt.edu
Thu Jul 3 16:46:46 EDT 2003
Let me show first how does it work for tuples:
>>> class MyTuple(tuple):
... def __new__(cls,strng): # implicit conversion string of ints => tuple
... return super(MyTuple,cls).__new__(cls,map(int,strng.split()))
>>> MyTuple('1 2')
(1, 2)
No wonder here, everything is fine. However, if I do the same for
lists I get the following:
>>> class MyList(list):
... def __new__(cls,strng): #implicit conversion string of ints => tuple
... return super(MyList,cls).__new__(cls,map(int,strng.split()))
>>> MyList('1 2')
['1', ' ', '2']
The same is true for
>>> class MyList(list):
... def __new__(cls,strng):
... return list.__new__(cls,map(int,strng.split()))
>>> MyList('1 2')
['1', ' ', '2']
therefore it is not a problem of super.
The 'map' expression does not seem to be executed or, if its executed,
it has no effect at all. If I replace 'map' with anything, still I have
the same result:
>>> class MyList(list):
... def __new__(cls,strng):
... return list.__new__(cls,map(int,[]) # !notice: empty list here!
>>> MyList('1 2')
['1', ' ', '2']
In other words I always get the result of
>>> list('1 2')
['1', ' ', '2']
and it seems impossible to override list.__new__.
I am very puzzled about that; any suggestions?
Michele
More information about the Python-list
mailing list