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.
无关
背景:我一直在尝试通过将全局变量转换为静态 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.
所以问题来自列表理解,与内部 class.