<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_tokens(self, tokenizer: Tokenizer) -> List[Token]: """ Tokenize this Extractable. If the value is a string, it returns the tokenized version of the string. Else, convert to string with get_string method As it is common to need the same tokens for multiple extractors, the Extractable should cache the tokenize results, keyed by segment and tokenizer so that given the same segment and tokenizer, the same results are returned. If the same segment is given, but different tokenizer, the different results are cached separately. Args: tokenizer (Tokenizer) Returns: a sequence of tokens. """


        if (self, tokenizer) in self.tokenize_results:
            return self.tokenize_results[(self, tokenizer)]
        else:
            segment_value_for_tokenize = self.get_string()
            tokens = tokenizer.tokenize(segment_value_for_tokenize)
            self.tokenize_results[(self, tokenizer)] = tokens
            return tokens