Переменная класса, назначенная выражением

У меня есть переменная класса – список – какие значения генерируются динамически путем понимания, например:

class A: Field = [2**x for x in range(8)] . . . 

Мой вопрос: это значение, вычисленное после импорта класса A или каждый раз, когда я вызываю A.Field ? Как Python рассматривает такие объявления, есть ли какие-то ограничения или скрытые препятствия?

Выражение оценивается один раз, когда выполняется инструкция class (в Python такие вещи, как class и def являются исполняемыми операторами ).

Когда вы это сделаете, все экземпляры A или подклассов будут иметь одно и то же Field .

… это значение, вычисленное после импорта класса A …

Обратите внимание, что здесь нет «импортированных». Если вы поместите инструкцию class внутри модуля и импортируете этот модуль более одного раза, оператор будет выполняться только один раз.

Вот пример, показывающий, что он оценивается только один раз:

 >>> l=range(2) >>> l [0, 1] >>> class A: ... Field = l.pop() ... >>> A.Field 1 >>> A.Field 1 >>> l [0] 

.pop() выполняется только один раз.