Да, см. PEP 484 §Пересылки :
Когда подсказка типа содержит имена, которые еще не были определены,
определение может быть выражено в виде строкового литерала, который будет разрешен позже.
Ситуация, в которой это обычно происходит, - это определение
контейнерный класс, где определяемый класс встречается в сигнатуре
некоторых методов.
Итак, в вашем примере ссылка на еще не определенный тип в строке:
class Cls1:
class Cls2:
p2: int
class Cls3:
p3: 'Cls2'
class Cls4:
p4: 'Cls2'
Обратите внимание, что, хотя Python рад принять вышеизложенное, mypy (v0.641), похоже, содержит ошибку и не может найти Cls2
.