Как указать вызываемый объект с произвольным списком аргументов (vararg)

Я пытаюсь ввести функцию, которая выглядит так:

def delete_file_if_exists():
    """Fixture providing a function that deletes a list of files of given filename it it exists
    """
    def deletion_function(*args: AnyPath) -> None:
        """A function deleting the file of given path if it exists
        :param args:The list of path to delete if file exists
        """
        for arg in args:
            if os.path.isfile(arg):
                os.remove(arg)
    return deletion_function

И мне интересно, как именно это напечатать:

1.

def delete_file_if_exists() -> Callable[..., None]:

работает, но не указывает тип переменных аргументов

2.

def delete_file_if_exists() -> Callable[[List[AnyPath]], None]:

не работает, но запуск mypy дает следующее исключение: Incompatible return value type (got "Callable[[VarArg(Union[str, bytes, _PathLike[str], _PathLike[bytes]])], None]", expected "Callable[[List[Union[str, bytes, _PathLike[str], _PathLike[bytes]]]], None]")

Поэтому мне интересно, могу ли я что-то сделать с этим VarArg (который я не могу импортировать) или если я застрял с многоточием.


person EnzoMolion    schedule 07.06.2021    source источник


Ответы (1)


Вы можете импортировать тип VarArg с mypy-extension.

person julDonze    schedule 07.06.2021
comment
def delete_file_if_exists() -> Callable[[VarArg(AnyPath)], None]from mypy_extensions import VarArg) действительно оказалось правильным решением - person EnzoMolion; 07.06.2021