Python 父类的引用同级

Python 父类的引用同级,python,scope,reference,flake8,python-typing,Python,Scope,Reference,Flake8,Python Typing,我正在尝试定义一个类型定义(pyi)文件。在我描述的模块中,有一个类的成员属于父类的成员类型(请参阅下面的代码片段以获得更清楚的解释)。我的问题是,如果在对话框之前定义了小部件,为什么小部件在对话框中引用时会引发“未定义名称”错误?如何正确地引用小部件 类类型(): 类Widget(): ... 类对话框(): def\uu getattr\uu(名称)->小部件: ... 您需要将小部件引用为小部件(python 3.7): 我不确定为什么在这种特殊情况下有必要这样做 [编辑]:对于某些拐角处

我正在尝试定义一个类型定义(pyi)文件。在我描述的模块中,有一个类的成员属于父类的成员类型(请参阅下面的代码片段以获得更清楚的解释)。我的问题是,如果在
对话框
之前定义了
小部件
,为什么
小部件
对话框
中引用时会引发“未定义名称”错误?如何正确地引用
小部件

类类型():
类Widget():
...
类对话框():
def\uu getattr\uu(名称)->小部件:
...

您需要将
小部件
引用为
小部件
(python 3.7):

我不确定为什么在这种特殊情况下有必要这样做

[编辑]:对于某些拐角处的情况,可能类型提示比过梁稍早一些;忽略linter,此语法不会引发错误,而您发布的语法会引发NameError:未定义名称“Widget”

哦,这是有效的:

class Widget:
    pass

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

您需要将
小部件
引用为
小部件
(python 3.7):

我不确定为什么在这种特殊情况下有必要这样做

[编辑]:对于某些拐角处的情况,可能类型提示比过梁稍早一些;忽略linter,此语法不会引发错误,而您发布的语法会引发NameError:未定义名称“Widget”

哦,这是有效的:

class Widget:
    pass

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

我用这种方法得到的错误与我用原始方法得到的错误相同。好的,谢谢你的反馈;对于某些角落的情况,可能类型提示比过梁稍早一些;忽略linter,此语法不会引发错误,而您发布的语法会引发
NameError:name'Widget'未定义。
。我使用此方法得到的错误与原始方法相同。好的,谢谢您的反馈;对于某些角落的情况,可能类型提示比过梁稍早一些;忽略linter,此语法不会引发错误,而您发布的语法会引发
NameError:name'Widget'未定义