IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Générateur attribut d'une classe


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 56
    Par défaut Générateur attribut d'une classe
    Bonjour,

    Il y a un truc que je ne comprends pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def gen():
       for i in range(1, 10):
           yield i
     
    a = gen()
    b = gen()
     
    print(next(a), next(a), next(b))
     
    class X():
       gen = gen()
     
    x = X()
    y = X()
     
    print(next(x.gen), next(x.gen), next(y.gen))
    Output:

    Je ne comprends pas pourquoi la dernière ligne est "3" au lieu d'être "1". Pourquoi le générateur de l'objet "y" est-il affecté par le générateur de l'objet "x"? Pourquoi n'en va-t-il pas de x et de y comme de a et de b?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    parceque ça pointe vers le même générateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class X():
       gen = gen()
     
    x = X()
    y = X()
    print x.gen,y.gen
    n'est évalué qu'une fois et non pas à chaque instanciation.

    Essaies avec un générateur dans l'__init__.

    enfin, je crois que c'est ça

    ici tu cées 2 générateurs, a et b:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def gen():
       for i in range(1, 10):
           yield i
     
    a = gen()
    b = gen()
     
    print(next(a), next(a), next(b))
    et là 1 seul, X.gen ... mais 2 pointeurs vers celui-ci,x.gen et y.gen:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class X():
       gen = gen()
     
    x = X()
    y = X()
     
    print(next(x.gen), next(x.gen), next(y.gen))

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 56
    Par défaut
    Merci beaucoup josmiley, effectivement, écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def __init__(self):
        self.gen = gen()
    résout le problème.

    Kloss

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AS2] Atteindre attribut d'une classe depuis une fonction interne a la classe
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/04/2006, 21h03
  2. [POO] retourner les attributs d'une classe
    Par ozzmax dans le forum Langage
    Réponses: 10
    Dernier message: 12/01/2006, 00h10
  3. Réponses: 2
    Dernier message: 27/03/2005, 16h09
  4. [VB.NET] Parcourir les attributs d'une classe
    Par pasqwal dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/02/2005, 09h47
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo