def get_cls( query: Union[None, str, Type[X]], base: Type[X], lookup_dict: Mapping[str, Type[X]], default: Optional[Type[X]] = None, suffix: Optional[str] = None, ) -> Type[X]: """Get a class by string, default, or implementation.""" if query is None: if default is None: raise ValueError(f'No default {base.__name__} set') return default elif not isinstance(query, (str, type)): raise TypeError(f'Invalid {base.__name__} type: {type(query)} - {query}') elif isinstance(query, str): try: return lookup_dict[normalize_string(query, suffix=suffix)] except KeyError: raise ValueError(f'Invalid {base.__name__} name: {query}') elif issubclass(query, base): return query raise TypeError(f'Not subclass of {base.__name__}: {query}')解释
时间: 2024-04-25 12:25:56 浏览: 128
crc.rar_CRC Builder_site:www.pudn.com
这是一个 Python 函数,名为 `get_cls`,它用于获取一个类。函数的参数如下:
- `query`:表示要获取的类。可以为字符串、类对象或 None(表示使用默认值)。
- `base`:表示要获取的类的基类。
- `lookup_dict`:表示要查询的类的字典,键是类名,值是类对象。
- `default`:表示默认要使用的类,如果 `query` 为 None,则使用此默认值。
- `suffix`:表示要附加到类名后面的后缀,用于标识不同的实现。
函数首先检查 `query` 的类型,如果为 None,则检查 `default` 是否为 None,如果为 None,则抛出 ValueError 异常。如果 `query` 不是字符串或类对象,则抛出 TypeError 异常。如果 `query` 是字符串,则使用 `normalize_string` 函数将其标准化,并在 `lookup_dict` 中查找相应的类对象,如果找不到,则抛出 ValueError 异常。如果 `query` 是类对象,并且是 `base` 的子类,则直接返回该类对象。否则,抛出 TypeError 异常。
阅读全文