如何键入提示可能包含文字 class 的变量

How can I type hint a variable that might contain a literal class

我正在向 vertica_python 的存根添加一些类型提示。其中一个函数在内部接受以下参数 (cursor_type):

def row_formatter(self, row_data):
    if self.cursor_type is None:
        return self.format_row_as_array(row_data)
    elif self.cursor_type in (list, 'list'):
        return self.format_row_as_array(row_data)
    elif self.cursor_type in (dict, 'dict'):
        return self.format_row_as_dict(row_data)
    else:
        raise TypeError('Unrecognized cursor_type: {0}'.format(self.cursor_type))

因此此函数需要 'list'、'dict'、type 列表或 type 字典。我想使用 Optional[Literal[list, dict, 'list', 'dict']],但这不受支持:

Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value

有什么方法可以达到我的目的吗?

您可以输入提示 Union[None, Type[list], Type[dict], Literal["list", "dict"]]

(从键入中导入联合和类型)

请注意,因为这也会接受列表或字典的子类