Есть ли способ сделать так, чтобы 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) не поддерживают это, но, возможно, я что-то упустил или есть обходной путь (?).