modifying __new__ of list subclass

Ken Schutte kschutte at csail.mit.edu
Mon Aug 14 20:20:47 EDT 2006


Hi,

I'm been trying to create some custom classes derived from some of 
python's built-in types, like int and list, etc.  I've run into some 
trouble, which I could explain with a couple simple examples.  Lets say 
I want an int-derived class that is initilized to one greater than what 
it's constructor is given:

class myint(int):
   def __new__(cls, intIn):
     newint = int(intIn+1)
     return int.__new__(cls, newint)

print myint(3), myint(10)


Okay, seems to do what I want.  Now, lets say I want a list class that 
creates a list of strings, but appends "_" to each element.  I try the 
same thing:


class mylist(list):
   def __new__(cls, listIn):
     newlist = list()
     for i in listIn:
       newlist.append(str(i) + "_")
     print "newlist: ", newlist
     return list.__new__(cls, newlist)

print mylist(("a","b","c"))

Doesn't seem to work, but that print statement shows that the newlist is 
what I want...   Maybe what I return from __new__ is overwritten in 
__init__?   Could someone enlighten me as to why - and why this is 
different than the int case?

Thanks,
Ken



More information about the Python-list mailing list