Как мне указать этот тип кортежа аргумента переменной с типизацией Python? - PullRequest
0 голосов
/ 24 февраля 2019

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

def initialize_signals(
        self,
        command: InitializeCommand,
        initializers: Iterable[Union[
            Tuple[SignalNode],
            Tuple[SignalNode, Any, ...]
                  ]]):
    for x, *args in initializers:
        potential_update = command.create_potential_update(x, *args)

1 Ответ

0 голосов
/ 24 февраля 2019

в настоящее время нет аннотации, которая могла бы представлять добавление кортежа фиксированной длины с кортежом переменной длины.

вот некоторый код, который я использовал, чтобы определить, как вывод mypy будет обрабатывать что-то вроде этого:

from typing import Tuple

x: Tuple[int, ...]
y = ('hi', *x)
z = (*x,)
reveal_type(y)
reveal_type(z)

и вывод:

$ mypy t.py
t.py:6: error: Revealed type is 'builtins.tuple[builtins.object*]'
t.py:7: error: Revealed type is 'builtins.tuple[builtins.int*]'

несмотря на знание, что это кортеж переменной длины int, он распадается на object.

Возможно, вы захотите провести рефакторингваш код для использования Tuple[SignalNode, Tuple[Any, ...]] вместо

...