trapwalker
@trapwalker
Программист, энтузиаст

Как правильно чистить generic-тип от параметров: List[str] -> List?

В python3.7 нарушилась обратная совместимость в плане проверки типов джинериков:
$ python3.6 -c "import typing; print(issubclass(typing.List[str], typing.List))"
True
$ python3.8 -c "import typing; print(issubclass(typing.List[str], typing.List))"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.8/typing.py", line 774, in __subclasscheck__
    raise TypeError("Subscripted generics cannot be used with"
TypeError: Subscripted generics cannot be used with class and instance checks

Оставим сейчас за скобками всё моё отвращение к тому, как в питоне решено было реализовать тайпхинтинг и джинерики. Не будем плеваться на фекалистичный код в стандартной библиотеке питона. Просто побомбим на тему:
А как же правильно элегантно и коротко отчистить описание типа от параметров.

Где-то встречал такое:
getattr(typing, List[str]._name)
Но, блин, они серьёзно?! Неужели нет способа лучше?

Честно сказать давно стараюсь поменьше смотреть в сторону подробностей реализации некоторых "грязных" мест любимого языка программирования. Одно расстройство.
Вот наткнулся при миграции своего небольшого проекта с 3.6 на 3.8 на очередную лепёшку.
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы