导入具有相互依赖的类变量的类时如何解决NameError

时间:2019-04-09 12:04:15

标签: python python-3.x

我在文件中创建一个类。声明一些类变量A = 5和另一个类变量B = A+1。 从另一个文件导入该类时,出现NameError:未定义名称'A'。 有没有办法解决这个问题,或者类变量可以/不应该像我尝试的那样不依赖于其他类变量?

请注意,此NameError仅在我从另一个文件导入时发生。如果我要定义类并在同一文件中创建该类的实例,那么一切都会顺利进行。

文件:file1.py

class foo:
    A = 5
    B = A+7

文件:file2.py

from file1 import foo

然后我运行:

python file2.py

并获得

NameError: name 'A' is not defined.

编辑:上面的示例过于简单,无法反映我的实际问题。 我实际上是想这样定义一个类:

class foo:
    A = 5
    B = [i*A for A in range(3)]

我在答案中的链接中找到了它在Python 3中不起作用的原因。

2 个答案:

答案 0 :(得分:2)

使用类变量的限定名称

this_module.py中:

class C:
    a = 0
    b = C.a + 1

...在其他一些文件中:

from this_module import C

答案 1 :(得分:0)

我发现了问题。我的代码段过于简化,无法准确反映我的实际情况。 我实际上是在做这样的事情:

class C:
    foo = 2
    bar = [i*foo for i in range(3)]

,然后从另一个文件导入该类。 根据{{​​3}},在Python 3中,这显然适用于python 2:

  

类作用域和列表理解不能混在一起。

因此,您已经拥有了它。实际上,这可以标记为重复项。