В 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 на очередную лепёшку.