Ссылочный брат родительского класса - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь определить файл определения типа (pyi). В модуле, который я описываю, есть класс, в котором есть члены, принадлежащие к типу, который является членом родительского класса (см. Фрагмент кода ниже для более ясного объяснения). Мой вопрос: если Widget определен до Dialog, почему Widget вызывает ошибку flake8 "undefined name" при ссылке внутри Dialog? Как я могу правильно ссылаться на Widget?

    class types():
        class Widget():
            ...

        class Dialog():
            def __getattr__(name) -> Widget:
                ...

1 Ответ

0 голосов
/ 14 мая 2019

Вам необходимо указать Widget как 'Widget' (python 3.7):

class types():
    class Widget():
        ...

    class Dialog():
        def __getattr__(name) -> 'Widget':
            ...

Я не уверен, почему это необходимо в данном конкретном случае.

[Edit]: возможно, подсказки типа немного опережают пометки для некоторых угловых случаев; игнорируя линтер, этот синтаксис не генерирует ошибку, тогда как тот, который вы опубликовали, генерирует NameError: name 'Widget' не определено.

OTH, это работает:

class Widget:
    pass

class Dialog:
    def __getattr__(name) -> Widget:
        pass
...