Blender has a nice straightforward answer but for what it's worth, I notice that you typed:
getitem(s, 2)
It looks like you were thinking something like this:
def __getitem__(self, x):
| |
--------- |
| ------------
v v
getitem(s, 2)
It may or may not be of some benefit to you for me to note that when you define a method for a class and you pass self as an argument, you're specifying the instance of that class, i.e. the object, as self. So when you do self.s = s you're saying "set this object's s to the parameter s's value."
self does not become one of the arguments in parentheses; you can think of that argument as being a special one outside of the parentheses.
def __getitem__(self, x):
| |
------------------ |
| ---------
v v
s.__getitem__(2)
Again, as Blender said, since __getitem__() is a special function (which is kind of like an operator override for subscript), you shouldn't call it directly - just a heads up!
For more, see this question.