Dans Python 2, l'accès aux variables de classe à partir d'une compréhension de liste dans la définition de classe était possible. Cependant, dans Python 3 et versions ultérieures, cela n'est pas autorisé en raison de restrictions de portée. La portée de la classe est traitée séparément de la portée des compréhensions et des autres fonctions et, par conséquent, l'accès aux variables de classe à partir d'une compréhension en utilisant des noms n'est pas autorisé.
Par exemple, le code suivant en Python 2 fonctionnerait :
1 2 3 |
|
Cependant, en Python 3, cela entraînerait une erreur :
1 |
|
La raison de cette restriction est due à la façon dont Python gère les étendues. Lors de l’évaluation d’une compréhension de liste dans une définition de classe, Python crée une nouvelle portée pour cette compréhension. Cette nouvelle portée n'inclut pas la portée de la classe, donc toutes les variables définies dans la portée de la classe ne sont pas visibles dans la compréhension.
Les compréhensions, les expressions génératrices et les fonctions lambda ont toutes leurs propres portées isolées, ce qui signifie qu'elles ne peuvent pas accéder directement aux variables à partir de la fonction englobante ou de la portée de la classe. Il s'agit d'une mesure de sécurité qui empêche les modifications involontaires des variables dans la portée englobante.
Il existe quelques solutions de contournement à cette restriction :
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 |
|
1 2 3 4 5 6 7 8 9 |
|
Il est important de noter que même si ces solutions de contournement permettent vous pouvez accéder aux variables de classe à partir des compréhensions, elles introduisent une complexité supplémentaire à votre code. Réfléchissez attentivement à l'approche la plus adaptée à vos besoins spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!