Введите подсказку из родительского класса - PullRequest
0 голосов
/ 26 октября 2018

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

class Cls1:
    class Cls2:
        p2: int

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

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

1 Ответ

0 голосов
/ 26 октября 2018

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

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

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

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

class Cls1:
    class Cls2:
        p2: int

    class Cls3:
        p3: 'Cls2'

    class Cls4:
        p4: 'Cls2'

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

...