Как ограничить универсальный тип псевдонимом, полученным из типа объединения в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как ограничить универсальный тип псевдонимом, полученным из типа объединения в Python

Сообщение Anonymous »

Краткое описание:
Я хочу, чтобы функция объединения принимала два аргумента одного типа. Это общий тип T.
И T — это один элемент определенного типа объединения couldTypeForCombine = int | str. Я хочу ограничиться возможным типомForCombine, а не включенным в него типом, поскольку определение возможного типаForCombine может измениться. Поступая таким образом, mypy обнаружит проблему, если я не адаптирую сопоставление с образцом в функции объединения

Я пытаюсь улучшить функцию, которая объединяет два значения одного типа, в настоящее время поддерживаются int и str. Вот моя текущая реализация:

Код: Выделить всё

def combine[T: (int, str)](a: T, b: T) -> T:
match a:
case int():
return a + b
case str():
return a + " " + b
При этом проверка типа mypy проходит. Однако я хочу сделать его более расширяемым для будущих дополнений других типов. Я хотел бы использовать псевдоним типа couldTypeForCombine для представления разрешенных типов. Я попробовал определить это как:

Код: Выделить всё

possibleTypeForCombine = int | str
# or
from typing import Union
possibleTypeForCombine = Union[int, str]
Моя цель — иметь возможность легко добавлять новые типы в возможные типыForCombine в будущем, и mypy сообщает мне, где мне нужно добавить новые случаи в функции, использующие этот тип.
Я попыталась использовать псевдоним этого типа в новой версии функции:

Код: Выделить всё

def combine2[T: possibleTypeForCombine](a: T, b: T) -> T:
match a:
case int():
c = a + b
return c
case str():
c = a +" " + b
return c
Однако это приводит к следующим ошибкам mypy:

ошибка: отсутствует оператор возврата. Ошибка [return]: не поддерживается. Типы операндов для + («str» и «T») Ошибка [оператора]: несовместимый тип возвращаемого
значения (получено «str», ожидается «T») [возвращаемое значение]

Конечно, я этого ожидал. Синтаксис ограничения универсального типа: T: (возможный тип 1, возможный тип 2).
Я хотел бы знать, возможно ли тем не менее сделать что-то подобное< /п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-in-pytho
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»