<br>Is there a good way to trace what's going on under the hood wrt operator overloading?<br>
<br>I am trying to understand what is happening in the code and output listed below.<br><br>Why doesn't __getitem__ in mylist return the same result as the builtin list object? <br>Does it have something to do with the start and stop arguments to slice?<br>
Is the slice object making the call to __len__?  <br><br><br><br>____code___________________________________________________<br><br>class mylist():<br>    def __init__(self, data):<br>        self.data = data<br>    def __len__(self):<br>
        print('len(self.data) -> self.data = {0}'.format(self.data))<br>        return len(self.data)<br>    def __getitem__(self, index):<br>        print('__getitem__(index) -> index = {0}'.format(index))<br>
        return self.data[index]<br><br>if __name__ == "__main__":<br>    alist = [1, 2, 4]<br>    blist = mylist(alist)<br>    print('printing alist[-4:]')<br>    print(alist[-4:])<br>    print('printing blist[-4:]')<br>
    print(blist[-4:])<br>    print('printing blist[-2]')<br>    print(blist[-2])<br><br><br>____output_________________________________________________<br>
<br>printing alist[-4:]<br>[1, 2, 4]<br>printing blist[-4:]<br>len(self.data) -> self.data = [1, 2, 4]<br>__getitem__(index) -> index = slice(-1, 9223372036854775807, None)<br>[4]<br>printing blist[-2]<br>__getitem__(index) -> index = -2<br>
2<br><br><br>Best,<br>Josh Benner<br>