Как ограничить универсальный тип типом внутри типа параметраPython

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

Сообщение Anonymous »

Я пытаюсь улучшить функцию, которая объединяет два значения одного типа и в настоящее время поддерживает 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]
Моя цель — иметь возможность легко добавлять новые типы в возможныйTypeForCombine в будущем, а 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 ... ption-type
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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