2011-09-07 10 views
2

Ok J'ai deux classes et l'une dépend de l'autre. J'ai donc besoin d'une variable de la première classe et je l'utilise dans la seconde. Mais la deuxième variable est en constante évolution. Comme ceci:Python: Partage de variables entre classes/objets

class class1 : 
    var1 = 0 
    def meth1 (self): 
     self.var1 += 1 
class class2: 
    var2 = class1.var1 
    def see (self): 
     return self.var2 
obj1 = class1() 
obj2 = class2() 

obj1.meth1() 
obj2.see() 

Cela retournerait 0 pas 1. Si je dis impression var1 en classe un il imprime qui a changé var. Mais quand class2 l'obtient il est encore 0 ... Je suppose qu'il fait toujours référence à l'ancien var1. Qu'est-ce que je fais de mal et que devrais-je faire?

Merci

+1

d'abord. Veuillez capitaliser les noms de classe. Seconde. Pourquoi n'utilisez-vous pas les variables de niveau classe en premier lieu? Votre 'var1' n'est pas une variable d'instance. Pourquoi évitez-vous les variables d'instance ordinaires? –

+0

Qu'est-ce qu'une variable d'instance? –

+0

C'est une toute nouvelle question. 1. Faites en fait le ** tutoriel Python ** entier. 2. Recherchez "Variable d'instance Python". 3. Posez à nouveau la question, après avoir fait tout le tutoriel et lu les centaines de pages Web sur les variables d'instance Python. C'est un concept fondamental, et difficile à couvrir dans un commentaire sur une question sans rapport. –

Répondre

6
class class2: 
    var2 = class1.var1 

Ceci est une copie de la valeur actuelle de class1.var1.

« Je dois obtenir une variable de la première classe et l'utiliser dans le second »

Utilisation class1.var1 au lieu de faire une copie de la valeur actuelle en var2.

+0

OH alors quand je change var1, var2 pointe toujours sur ce que ne doit pas être var1? Maintenant, c'est logique. Merci pour l'aide! –

+0

C'est ce que «copie» signifie, correct. –

+1

Article très utile qui aidera à comprendre les variables dans python et comment en faire des copies correctes: http://henry.precheur.org/python/copy_list – Ski

0

Toutes les informations sur la façon dont les variables sont coppied est vrai, et l'article recommandé est bien expliqué. Mais si vous utilisez class1.var1 vous n'obtiendrez jamais la valeur self.var1 de class1. Vous pouvez vérifier pourquoi avec le code suivant:

class Class1 : 
var1 = 0 
def meth1 (self): 
    self.var1 += 1 
    print(id(self.var1)) 

class Class2: 
def meth2 (self): 
    print(id(Class1.var1)) 

obj1 = Class1() 
obj2 = Class2() 

obj1.meth1() 
obj2.meth2() 

Si vous obtenez différentes ids pour Class1.var1 (qui est var1 en ligne 2) et self.var1.

Si vous souhaitez obtenir la valeur de self.var1 de Class2, vous devez initialiser var1 en dehors de la classe, et la rendre globale dans la fonction où vous ajoutez un numéro:

var1 = 0 
class class1 : 

    def meth1 (self): 
     global var1 
     var1 += 1 

class class2: 

    def meth2 (self): 
     print(var1) 

obj1 = class1() 
obj2 = class2() 

obj1.meth1() 
obj2.meth2() 
Questions connexes