python
Код: Выделить всё
def combine1(a: int | str, b: int | str) -> int | str:
match a:
case int():
match b:
case int():
return a + b
case str():
return "error"
case str():
match b:
case int():
return "error"
case str():
return a + b
Чтобы улучшить это, я хочу использовать дженерики, чтобы mypy понимал, что a и b имеют один и тот же тип. Вот моя попытка:
python
Код: Выделить всё
def combine2[T: int | str](a: T, b: T) -> T:
match a:
case int():
return a + b
case str():
return a + b
текстовая ошибка: несовместимый тип возвращаемого значения (получено «int», ожидается "T")
Ошибка [возвращаемого значения]: неподдерживаемые типы операндов для + ("int" и "T")
Ошибка [оператора]: несовместимый тип возвращаемого значения (получено "str", ожидается)
"T") [возвращаемое значение] ошибка: неподдерживаемые типы операндов для + ("T" и
"T") [оператор]
Как я могу изменить эту функцию, чтобы правильно использовать дженерики и удовлетворять проверке типов mypy, гарантируя при этом, что функция принимает только два аргумента одного и того же типа (либо int, либо оба str), и избегая неэффективности первой реализации ?
Этот вопрос отличается от этого: Как использовать подсказку типа, чтобы гарантировать, что две переменные всегда имеют один и тот же тип?
потому что Я пытаюсь предложить решить эту проблему с помощью generic. Чего нет в этом вопросе.
Кроме того, этот вопрос не использует сопоставление с образцом внутри функции. Я хочу избежать двойной проверки типа переменных, потому что я уже знаю, что они имеют один и тот же тип. Я хотел бы просто проверить тип T.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -two-argum