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
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.