这个类和函数是怎么相互作用的呢?如何实现?

 ###### 问题遇到的现象和发生背景
我不太清楚这个返回是什么意思
return Tokenizer(categorical2index, index2categorical, contain_pad)
如果我有一个列表categorical=['zhou','hai','bo','bo']
我应该怎么对它进行cat2index和index2cat的操作呢?
 ###### 问题相关代码,请勿粘贴截图

from typing import Any, Callable, Dict, List, Optional
class Tokenizer(object):  # 语法分析
    def __init__(
            self,
            cat2index: Dict[Any, Any],
            index2cat: Optional[Dict[Any, Any]] = None,
            # optional的意思是可选项,在一个方法里如果有inputoptional的话,不选就是选择默认,也就是default 。使用 Optional 是为了让 IDE 识别到该参数有一个类型提示,可以传指定的类型和 None,且参数是可选非必传的
            padding: bool = False,
            default_value: Any = 0,
    ) -> None:
        super().__init__()
        self.cat2index = cat2index
        self.index2cat = index2cat
        self.padding = padding
        self.default_value = default_value

    def encode(self, data: Any) -> Any:
        return self.cat2index.get(data, 0)

    def decode(self, index: Any) -> Any:
        assert self.index2cat is not None
        return self.index2cat[index]

    def __len__(self):
        return len(self.cat2index)
def categorical_to_index(categorical: List[Any], contain_pad=False):
    set_categorical = set(categorical)  # set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
    padding = 1 if contain_pad else 0
    categorical2index = {cat: i + padding for i, cat in enumerate(set_categorical)} #使用enumerate给序列加上了序号(index)
    if contain_pad:
        categorical2index["<PAD>"] = 0  # Padding or Unseen
    index2categorical = {v: k for k, v in categorical2index.items()} #将键和值交换
    return Tokenizer(categorical2index, index2categorical, contain_pad)


 ###### 运行结果及报错内容

 ###### 我的解答思路和尝试过的方法

 ###### 我想要达到的结果