3 votes

Variables statiques dans un autre fichier en Python

J'ai actuellement des difficultés à modifier une variable statique dans un autre fichier en Python.

FichierA

class MainClass(object):
    global_var = 0
    def __init__(self):
        MainClass.global_var = 1

class SecondClass(object):
    def __init__(self):
        MainClass.global_var = 2

if __name__ == '__main__':
    main = MainClass()
    print "After MainClass:" + str(MainClass.global_var)

    second = SecondClass()
    print "After SecondClass:" + str(MainClass.global_var)

    from FileB import ThirdClass
    third = ThirdClass()
    print "After ThirdClass:" + str(MainClass.global_var)

FichierB

class ThirdClass(object):
    def __init__(self):
        from FileA import MainClass
        MainClass.global_var = 3

Sortie

After MainClass:1
After SecondClass:2
After ThirdClass:2

Je voudrais modifier la variable statique dans MainClass pour qu'elle devienne 3 dans FileB. Qu'est-ce que je fais de travers ? Je vous remercie.

3voto

gnibbler Points 103484

Vous avez deux instances distinctes de la classe MainClass ! Cela est dû à la façon dont les importations Python fonctionnent.

Vous pouvez le vérifier en imprimant id(MainClass) de FileA ainsi qu'après l'avoir importé dans l'application __init__ en FileB

Il ne s'agit pas d'un bogue dans Python, vous essayez simplement de faire quelque chose que le langage Python ne spécifie pas comme devant fonctionner.

Expérimenter un code comme celui-ci est bon pour l'apprentissage, mais j'espère que vous n'essayez pas de faire quelque chose comme cela dans un vrai programme. Il y a certainement une meilleure façon que le spaghetti † comme suit.

† Toutes nos excuses aux spaghettis qui auraient été offensés par ce commentaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X