如何在另一个内部类中使用内部类作为类型注释?

Шах*_*Шах 5 python inner-classes python-3.x

我有以下类结构:

class Root:
    @dataclass
    class Leaf:
        pass

    @dataclass
    class Node:
        leaf: Leaf
Run Code Online (Sandbox Code Playgroud)

问题是PyCharm看不到Leaf类,我也尝试将其指定为leaf: Root.Leaf甚至'Root'.Leaf...有相同的结果。
如果类型是另一个内部类,如何在内部类中声明字段类型?在Python中可以吗?
PS我可以使该类Leaf成为类的内部成员Node,但我对我的示例感兴趣。

blh*_*ing 0

通常,您不能从另一个内部类引用内部类,但出于类型注释的目的,您可以使用字符串进行此类前向引用:

from dataclasses import dataclass

class Root:
    @dataclass
    class Leaf:
        pass

    @dataclass
    class Node:
        leaf: 'Root.Leaf'

print(Root.Node(Root.Leaf()).leaf)
Run Code Online (Sandbox Code Playgroud)

这将通过静态类型检查和输出:

Root.Leaf()
Run Code Online (Sandbox Code Playgroud)