2009-08-17 7 views
0

J'écris un jeu en Python avec la bibliothèque multimédia Pygame2, mais je suis plus habitué à développer des jeux avec ActionScript 3. En AS3, je ne pense pas qu'il était possible de stocker un objet dans une variable statique, car Les variables statiques ont été initialisées avant que les objets puissent être instanciés.Puis-je stocker des objets dans les membres de la classe Python?

Cependant, en Python, je ne suis pas sûr que cela soit vrai. Puis-je stocker une instance d'objet dans une variable de classe Python? Quand sera-t-il instancié? Sera-t-on instancié par classe ou par instance?

class Test: 
    counter = Counter() # A class variable counts its instantiations 
    def __init__(self): 
     counter.count() # A method that prints the number of instances of Counter 

test1 = Test() # Prints 1 
test2 = Test() # Prints 1? 2? 
+0

Etes-vous sûr que vous voulez dire statique? Vous pouvez définir statique Variables comme n'importe quelle autre variable dans ActionScript 3. Ou peut-être statiques signifie quelque chose d'autre Python (par rapport à ActionScript 3)? –

+0

Hmmm ... peut-être que je pensais à des constantes.Soit des variables statiques ou des constantes ont été définies au moment de la compilation, avant que tous les objets pourraient être instanciés. –

Répondre

2

Oui.
Comme avec la plupart des python l'essayer et voir.

Il sera instancié lors de la création d'un objet de test. à-dire votre affectation à test1
L'objet compteur est créé par classe

Exécuter ce qui suit pour voir (pour accéder à la variable de classe que vous avez besoin de l'auto

class Counter: 
    def __init__(self): 
    self.c = 0 

    def count(self): 
    self.c += 1 
    print 'in count() value is ' , self.c 
    return self.c 

class Test: 
    counter = Counter() # A class variable counts its instantiations 
    print 'in class Test' 
    def __init__(self): 
    print 'in Testinit' 
    self.counter.count() # A method that prints the number of instances of Counter 

test1 = Test() # Prints 1 
test2 = Test() 
3

Vous pouvez le faire:

class Test: 
    counter = 0 
    def __init__(self): 
    Test.counter += 1 
    print Test.counter 

Et il fonctionne comme prévu.

Questions connexes