Запретить определенные типы для TypeVar в Python - PullRequest
0 голосов
/ 09 декабря 2018

Есть ли способ сделать так, чтобы Python TypeVar был недопустимым для привязки к некоторым типам ?

IЯ знаю, что вы можете ограничить TypeVar некоторыми типами, иметь верхнюю границу или пометить его как ковариантный / контравариантный / инвариантный, но, похоже, нет способа сказать «TypeVar не разрешено быть этими типами».

По сути, я хотел бы сказать что-то вроде std::enable_if_t<!std::is_base_of_v<NotAllowedType, T>> в C ++.

Например, T никогда не должно быть Исключение :

from typing import Union, Generic, TypeVar


T = TypeVar('T')


class Expected(Generic[T]):
    def __init__(self, value_or_error: Union[T, Exception]):
        self._value_or_error = value_or_error

    def is_valid(self) -> bool:
        return not isinstance(self._value_or_error, Exception)

, но на ум не приходит простой способ добиться этого.Насколько я знаю, большинство дженериков (например, Java, Scala, Kotlin) не поддерживают это, но, возможно, я что-то упустил или есть обходной путь (?).

1 Ответ

0 голосов
/ 10 декабря 2018

Как и ожидалось, похоже, что в настоящее время это не поддерживается: https://github.com/python/typing/issues/599

...