<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def getitem(self, index, context=None):
 """Return the inference of a subscript. This is basically looking up the method in the metaclass and calling it. :returns: The inferred value of a subscript to this class. :rtype: NodeNG :raises AstroidTypeError: If this class does not define a ``__getitem__`` method. """

        try:
            methods = dunder_lookup.lookup(self, "__getitem__")
        except exceptions.AttributeInferenceError as exc:
            raise exceptions.AstroidTypeError(node=self, context=context) from exc

        method = methods[0]

        # Create a new callcontext for providing index as an argument.
        new_context = contextmod.bind_context_to_node(context, self)
        new_context.callcontext = contextmod.CallContext(args=[index])

        try:
            return next(method.infer_call_result(self, new_context))
        except exceptions.InferenceError:
            return util.Uninferable