我在文件中创建一个类。声明一些类变量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中不起作用的原因。
答案 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:
类作用域和列表理解不能混在一起。
因此,您已经拥有了它。实际上,这可以标记为重复项。