J'essaie d'étaler mon code sur des fichiers séparés pour améliorer la lisibilité, et je rencontre des problèmes avec des noms globaux indéfinis référencés dans des fichiers importés. Y at-il une meilleure solution que de passer délibérément toutes les valeurs nécessaires aux fonctions lors de l'appel?Variables globales dans les fonctions de classe importées en Python
Mon code est actuellement comme ceci:
#foo.py
import bar
def main():
a = 1
b = bar.Bar()
while True:
a += 1
b.incr()
print a
print b.c
if __name__ == '__main__':
main()
#END foo.py
-
#bar.py
class Bar:
def __init__(self):
self.c = 0
def incr(self):
self.c += a
#END bar.py
Il me donne NameError: nom global 'a' est pas défini. Ai-je besoin de réécrire main() comme ceci:
def main():
b = new bar.Bar()
while True:
a += 1
b.incr(a)
print a
print b.c
Et réécrire INCR() comme ceci:
def incr(self,a):
c += a
Ou est-il une meilleure façon?
Pour mémoire, le code ci-dessus est fortement abstrait. Le code actuel implique un grand nombre de classes et de fonctions passant plusieurs variables de plusieurs types, y compris certains grands dictionnaires.
Merci d'avance!
Puisque les variables globales ne sont généralement pas une bonne idée, passer des variables de fonction à fonction est la meilleure option. –
en passant un à 'incr()' est une meilleure idée – PurityLake
Merci @PurityLake et MartijnPieters - en ce qui concerne la performance, est-ce pas un problème? Existe-t-il une bonne solution pour passer de grandes quantités de variables de la fonction à la fonction? Collez-les tous dans un dictionnaire, ou un dictionnaire de dictionnaires, peut-être? – yoel