HfArgumentParser是transformers.hf_argparser.py内的一个类,进一步封装了python的argparse模块,主要处理命令行的参数。
代码解读
hf_argparser.py中首先使用typing模块下的NewType类定义了两个新的数据类型,NewType的第一个参数是数据类型的名称,该数据类型具体可以是Any类型(即各种类型)。
DataClass = NewType("DataClass", Any)
DataClassType = NewType("DataClassType", Any)
init函数解读
class HfArgumentParser(ArgumentParser):
"""
argparse.ArgumentParser的子类,使用数据类(dataclasses)来生成参数。
这个类被设计成可以很好地与python的argparse配合使用。特别是,您可以在初始化之后向解析器添加更多(非数据类支持的)参数,并且您将在解析后获得作为附加名称空间的输出。可选:要创建子参数组,请在数据类中使用' _argument_group_name '属性。
"""
dataclass_types: Iterable[DataClassType] # 定义一个DataClassType类型的可迭代对象
def __init__(self, dataclass_types: Union[DataClassType, Iterable[DataClassType]], **kwargs):
"""
Args:
dataclass_types:
Dataclass type, or list of dataclass types for which we will "fill" instances with the parsed args.
kwargs (`Dict[str, Any]`, *optional*):
Passed to `argparse.ArgumentParser()` in the regular way.
"""
# To make the default appear when using --help
if "formatter_class" not in kwargs:
kwargs["formatter_class"] = ArgumentDefaultsHelpFormatter
super().__init__(**kwargs)
if dataclasses.is_dataclass(dataclass_types): # 判断dataclass_types是否是一个数据类
dataclass_types = [dataclass_types] # 是,则将数据类变为一个数据类列表
self.