I'm trying to do this, but I'm not sure how to specify the type signature:
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)
there currently isn't an annotation which can represent the addition of a fixed-length tuple with a variable length tuple.
here's some code I used to determine how mypy's inference would handle something like this:
from typing import Tuple
x: Tuple[int, ...]
y = ('hi', *x)
z = (*x,)
reveal_type(y)
reveal_type(z)
and output:
$ 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*]'
despite knowing that it's a variable-length int
tuple it decays to object
.
You may want to refactor your code to use Tuple[SignalNode, Tuple[Any, ...]]
instead
来源:https://stackoverflow.com/questions/54856277/how-do-i-specify-this-kind-of-variable-argument-tuple-with-python-typing