Допустим, у меня есть это ограничение типа для dataclass
:
from dataclasses import dataclass
from typing import Sequence
from numbers import Integral
@dataclass
class Coefficients:
coefs: Sequence[Integral]
Теперь я хочу знать, будет ли объект [1, 2, 3]
удовлетворять этому ограничению типа.Я хочу знать это, так как я пишу код / проектирую, не обязательно во время выполнения, так что как решение статической проверки, так и решение времени выполнения подойдут.
Я пробовал isinstance()
, но он не работает с параметризованнымтипы:
$ mypy -c 'from typing import Sequence; from numbers import Integral; isinstance([1, 2, 3], Sequence[Integral])'
<string>:1: error: Parameterized generics cannot be used with class or instance checks
$ python -c 'from typing import Sequence; from numbers import Integral; isinstance([1, 2, 3], Sequence[Integral])'
[...]
TypeError: Subscripted generics cannot be used with class and instance checks
В общем, я хотел бы знать, как проверять объекты по произвольным аннотациям типов;хотя я легко могу узнать, является ли List
Sequence
, а int
- Integral
, позже я, возможно, захочу проверить более сложные структуры.Как мне это сделать?