python - 父类的引用 sibling

标签 python scope reference flake8 python-typing

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

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

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

最佳答案

您需要将Widget引用为'Widget'(python 3.7):

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

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

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

[编辑]:对于某些极端情况,类型提示可能比短绒提前一些;忽略 linter,此语法不会引发错误,而您发布的语法则会引发 NameError: name 'Widget' is not Defined。

另外,这有效:

class Widget:
    pass

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

关于python - 父类的引用 sibling ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132098/

相关文章:

python - 如何连接 3 个表并执行 func.sum

python - for循环中的变量插值?

Spring Batch - "job"作用域 bean 无法注入(inject)到 "job"或 "step"作用域 bean

c++ - 全局变量和枚举之间的范围问题

c++ - 我应该更喜欢成员数据中的指针还是引用?

python - 如何使用 mac OSX 将 python 脚本注册为 Web 浏览器

python - 如何在 Google Compute Engine 中通过 Python 访问 Google Cloud SQL

javascript - 同一个变量声明了两次。用的是哪个? -- JavaScript

ios - 体系结构的 undefined symbol x86_64 : "_OBJC_CLASS_$_UIPointerShape", "_OBJC_CLASS_$_UIPointerStyle"

c++ - 通过引用传递 vector - 段错误 C++