Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python使用内部类作为静态类变量_Python_Python 3.x_Inner Classes - Fatal编程技术网

python使用内部类作为静态类变量

python使用内部类作为静态类变量,python,python-3.x,inner-classes,Python,Python 3.x,Inner Classes,背景:我一直在尝试通过将全局变量转换为静态类变量,将方法转换为类方法,将整个python文件包装到另一个文件的类中。。。python文件本身有一个类,并且有该类的全局实例化,这意味着该类现在是一个内部类,我需要该内部类类型的静态类变量。[如果您有更好的方法将整个python文件作为类包含在其他python文件中,而不使用模块(我需要将所有代码严格地放在一个文件中),请告诉我。尽管如此,我还是很想知道下面的错误] 我已经能够将我的问题归结为以下几点: class ok: class he:

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

我已经能够将我的问题归结为以下几点:

class ok:
    class he: 
        def __init__(self):
            self.x=1
    she=[he() for i in range(3)]
将导致:'名称'他'未定义',但是:

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

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

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