Тут в в соседнем треде человек спрашивал «что нельзя описать тайпхинтами» в python.
Вот в примере из документации: https://docs.python.org/3/library/typing.html#typing.Type
функция:
def make_new_user(user_class: Type[User]) -> User:
# ...
return user_class()
Вот тут явно неправильный возвращаемый тип. Мы не возвращаем объект типа User, мы возвращаем объект типа user_class, которым может быть User, а может быть и его потомком.
p = make_new_user(ProUser)
p. # вот на этом месте PyCharm мне ничего не подсказывает из методов ProUser, думая, что у меня в p сидит User.