,list[bool] ,list[list[bool]]
,list[int] ,list[list[int]]
,list[float] ,list[list[float]]
,list[str] ,list[list[str]]
,set[bool] ,set[set[bool]]
,set[int] ,set[set[int]]
,set[float] ,set[set[float]]
,set[str] ,set[set[str]]
,list[set[bool]] ,set[list[bool]]
,list[set[int]] ,set[list[int]]
,list[set[float]] ,set[list[float]]
,list[set[str]] ,set[list[str]]
,dict[int,int] ,dict[set[list[bool]],int]
,dict[int,str] ,dict[str,dict[int,str]]
,dict[str,int] ,dict[list[set[str]],float]
,dict[int,str] ,dict[int,dict[float,list[str]]]
,tuple[int,bool,float,str,None]
,tuple[list[str],set[dict[list[int],set[str]]]]
,Union[int,bool,float,str,None]
,Union[dict[str,list[int]],list[set[int]]]]
0_о
А для чего тебе?
для валидатора kwargs ну и для тестирования разных других нужных тул в проекте есть некоторое семейство функций принимающих kwargs, развитие которых требует дофига чего и по этому в них встроена защита перво наперво функция вызывает кастомные ассерты того что в kwargs нет лишних ей параметров и о том что в kwargs все параметры указаны затем она проходит все типы всех параметров и сравнивает с требованиями (да жесткая типизация) затем она проходит по всем значениям и сравнивает их фактические типы с типами требований
> в kwargs нет лишних ей параметров и о том что в kwargs все параметры указаны звучит как будто вам не нужен kwargs
есть места где много параметров и их описания варьируются (состав, конкретные типы, опциональнось)
варьируются конфигурацией (которая фактически не доступна на этапе разработке, кроме тестовых вариантов)
ну-ка подробнее
Как ассерты с типами связаны? isinstance(foo, list[int]) не работает
а как насчет этих типов? list[list[int]] list[list[list[int]]] list[list[list[list[list[list[list[list[list[list[list[list[list[list[list[in]]]]]]]]]]]]]]]
dict[int, dict[int, dict[int, dict[int, ...]]]] :))
валидатор рекурсивный но в нем есть вроде управляемая глубина. это не так важно
а как насчет кастомных классов?
в том числе я не вписал их в пример
вот тебе задачка def foo(arg: list[int]): ... x: list[str] = [] foo(x) как ты собрался это проверять?
types.get_origin() + types.get_args()
и что туда передать?
[1,2,3.3] vs list[int] пофейлится на на сравнении третьего елемента грубо говоря там разные версии реализации для обхода значения и спецификации его типа есть def validate_nested_type(value: Any, param_type: Any, param_name: str) -> None: #... if not isinstance(value, typing.get_origin(param_type)): raise ValidationException(f"Type mismatch for parameter '{param_name}'.") #... и она у себя вызывает validate_nested_type себя же только передав типы вытащенные с get_args
ты мой пример старательно игнорируешь
Обсуждают сегодня