This probably isn't exactly what you want, but, unless you wanted to do something especially with your own string class, I would just pass a function to the sorted algorithm.
eg: sorted( [a,b,c], cmp=lambda a,b: cmp(len(a),len(b)) ) gives you the below in the right order... Never tried doing what you're doing, but something about builtin types, and there's a UserString module... Hope that helps a bit anyway, Jon. JH wrote: > Hi > > Can anyone explain to me why the following codes do not work? I want to > try out using __cmp__ method to change the sorting order. I subclass > the str and override the __cmp__ method so the strings can be sorted by > the lengh. I expect the shortest string should be in the front. Thanks > > >>> class myStr(str): > def __init__(self, s): > str.__init__(self, s) # Ensure super class is initialized > def __cmp__(self, other): > return cmp(len(self), len(other)) > > >>> a = myStr('abc') > >>> b = myStr('Personal') > >>> c = myStr('Personal firewall') > >>> sorted([c, b, a]) > ['Personal', 'Personal firewall', 'abc'] > >>> -- http://mail.python.org/mailman/listinfo/python-list