python 使用内部 class 作为静态 class 变量奇怪的行为

python using inner class as a static class variable weird behavior

背景:我一直在尝试通过将全局变量转换为静态 class 变量,将方法转换为 class 方法...等等 python 文件本身有一个 class,并且有那个 class 的全局实例化,这意味着 class 现在是一个内部class,我将需要内部 class 类型的静态 class 变量。 [如果您有更好的方法在不使用模块的情况下将整个 python 文件作为 classes 包含在其他 python 文件中(我需要将所有代码严格地放在一个文件中),请告诉我。尽管如此,我还是很想知道下面有什么问题]

我已经能够将我的问题简化为以下几点:

class ok:
    class he: 
        def __init__(self):
            self.x=1
    she=[he() for i in range(3)]

将导致:“名称 'he' 未定义”但是这有效:

class ok:
    class he: 
        def __init__(self):
            self.x=1
    she=[]
    for i in range(3):
        she.append(he())

据我所知,两种代码的结果相同,那么为什么一种合法而另一种不合法?

我发现了一个更简单的案例来重现您的问题: 问题是,在列表理解的第一种情况下,它会查找不存在的列表理解局部变量 toto(而 class 属性 toto 确实存在)。
然而,在第二种情况下,没有列表理解,因此它会查找任何名为 toto 的变量,并找到 class 属性 toto.
所以问题来自列表理解,与内部 class.

无关