Введите подсказку из родительского класса

Как вы можете намекнуть класс из родительского класса, как это?

class Cls1:
    class Cls2:
        p2: int

    class Cls3:
        p3: Cls2  # undefined name 'Cls2'

    class Cls4:
        p4: Cls2  # undefined name 'Cls2'

1 ответ

Да, см. PEP 484 §Пересылки:

Когда подсказка типа содержит имена, которые еще не определены, это определение может быть выражено как строковый литерал, который будет разрешен позже.

Ситуация, в которой это обычно происходит, - это определение класса контейнера, где определяемый класс встречается в сигнатуре некоторых методов.

Итак, в вашем примере, ссылка на еще не определенный тип в строке:

class Cls1:
    class Cls2:
        p2: int

    class Cls3:
        p3: 'Cls2'

    class Cls4:
        p4: 'Cls2'

Обратите внимание, что хотя Python с радостью принимает вышесказанное, mypy (v0.641), похоже, содержит ошибку и не может найти Cls2,

Другие вопросы по тегам