Я создаю класс в файле. объявить некоторую переменную класса 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, можно найти по ссылке в моем ответе.
Используйте полное имя переменной класса:
В this_module.py
:
class C:
a = 0
b = C.a + 1
... в другом файле:
from this_module import C
@Mazata Разве вы не должны принять свой собственный ответ в этом случае и отредактировать свой вопрос, чтобы отразить то, что вы на самом деле имели в виду?
Если подумать, да, вы правы. Я сделаю это, как только Stack Overflow позволит мне.
Я нашел проблему. Мой фрагмент кода был слишком упрощен, чтобы точно отражать мою реальную ситуацию. Я на самом деле делал что-то вроде этого:
class C:
foo = 2
bar = [i*foo for i in range(3)]
а затем импортировать этот класс из другого файла. Хотя это, по-видимому, работает в Python 2, согласно этот ответ, в Python 3:
class scope and list comprehension do not mix.
Итак, у вас есть это. На самом деле это может быть помечено как дубликат.
@Dschoni Это не сработает, потому что это переменная класса.