<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title></title>
</head>
<body>
Thanks for your example but I haven't found __iter__ method in list type:<br>
<br>
>>> dir(list)<br>
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli<br>
ce__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__',
'__gets<br>
lice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__',
'__<br>
len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__repr__',
'__r<br>
mul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append',
'coun<br>
t', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']<br>
>>><br>
<br>
Do you know why ?<br>
<br>
Peter Otten a écrit:<br>
<blockquote type="cite" cite="midbi608k$6ne$04$1@news.t-online.com">
  <pre wrap="">Franck Bui-Huu wrote:

  </pre>
  <blockquote type="cite">
    <pre wrap="">Hello,

I'm trying to customize a list by overriding __getitem__ method but
this change seems to not work with for iteration.
When I use my customized list in a for iteration, all changes made
in __getitem__ are not take into account.
How can I modify this behaviour ?

Thanks
    </pre>
  </blockquote>
  <pre wrap=""><!---->
For the for loop to work properly, you have to overide the __iter__()
method, e.g.:

class MyList(list):
    def __getitem__(self, index):
        """ for the sake of this example convert item to uppercase """
        return list.__getitem__(self, index).upper()
    def __iter__(self):
        """ implemented using a generator """
        for i in range(len(self)):
            yield self[i] # calls the customized __getitem__()

myList = MyList(["alpha", "beta", "gamma"])

# works with __getitem__()
for index in range(len(myList)):
    print myList[index]

print

# works with __iter__()
for item in myList:
    print item

Peter
  </pre>
</blockquote>
<br>
</body>
</html>