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 :

Variables dans méthode constructeur et méthode de classe : qui est qui? [Python 3.X]


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    ...
    Inscrit en
    Septembre 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 33
    Par défaut Variables dans méthode constructeur et méthode de classe : qui est qui?
    Bonjour,
    Dans ce code je crée une classe et 2 méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Intervenant:
     
    #  MÉTHODE CONSTRUCTEUR
    def __init__(self, IDENTIFIANT, VILLE):
       self.identifiant = IDENTIFIANT
       self.ville = VILLE
     
    #  MÉTHODE DE CLASSE
    sujetChat = "MÉTÉO"
     
    def changerSujet(cls, nouveauSujet):
       Intervenant.sujetChat = nouveauSujet
    changerSujet = classmethod(changerSujet)
    Dans la méthode constructeur, j'aurai pu aussi écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    def __init__(self, identifiant, ville):
       self.identifiant = identifiant
       self.ville = ville
     
    ... ou
    def __init__(self, toto, tata):
       self.identifiant = toto
       self.ville = tata
    J'aimerais savoir quel est le rôle des variables toto et tata, qui sont elles?
    En quoi la variable nouveauSujet dans la méthode de classe serait différente de toto et tata?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par Mr ZEE Voir le message
    J'aimerais savoir quel est le rôle des variables toto et tata, qui sont elles?
    Techniquement, "toto" et "tata" sont les paramètres ('formels') de la fonction/méthode __init__. Ce que recevra la fonction quand elle est appelée seront les arguments (d'appel) que vous allez récupérer via "toto", "tata" devenues variables locales dans le corps de la fonction.
    Et si on s'est appliqué à donner 3 noms différents à (presque) la même chose, c'est qu'il y a des concepts un peu différents derrière..

    Citation Envoyé par Mr ZEE Voir le message
    En quoi la variable nouveauSujet dans la méthode de classe serait différente de toto et tata?
    Le code que vous avez posté plante dès la déclaration de la "class" à cause de sa mauvaise indentation et çà ne permet pas de comprendre ce que vous racontez par ailleurs. Désolé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mr ZEE Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def __init__(self, toto, tata):
       self.identifiant = toto
       self.ville = tata

    J'aimerais savoir quel est le rôle des variables toto et tata, qui sont elles?
    Bonjour

    La création d'un objet se fait en 3 phases
    • appel de l'objet en lui passant les éléments dont il a besoin. Ce sont, (comme le dit Wiztricks), des arguments. Ex Intervenant("Paul", "Marseille")
    • ces arguments sont récupérés dans la méthode de création __init__() dans ses paramètres (variables dédiées à cette récupération). Le nom que tu donnes à ces paramètres est alors totalement libre pourvu que ce soit un nom autorisé par Python. Mais puisqu'il est libre, autant mettre des noms représentant la nature de ce que ça stocke. Ca permet ensuite de mieux relire ton code.
    • stockage de la valeur contenue dans ces paramètres (qui n'existent que durant la vie de la fonction donc très brièvement) dans des membres de l'objet (les variables associées à l'objet). Ces variables perdurent, elles, durant toute la vie de l'objet


    Citation Envoyé par Mr ZEE Voir le message
    En quoi la variable nouveauSujet dans la méthode de classe serait différente de toto et tata?
    Ben justement en rien. C'est là aussi un simple paramètre qui n'existe que durant la vie de la méthode lorsqu'elle est appelée.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre actif
    Homme Profil pro
    ...
    Inscrit en
    Septembre 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 33
    Par défaut
    Ok, donc si je résume, dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # CRÉATION D'OBJET      
    intervenant1 = Intervenant("BOB", "PARIS")
    print("Bienvenue {} de {}, vous êtes dans le chat {}".format(intervenant1.identifiant, intervenant1.ville, Intervenant.sujetChat))
    Je crée un objet intervenant1.
    Je fais ensuite un appel de l'objet = Intervenant et je lui passe les arguments qu'il attend ("BOB", "PARIS")
    Les paramètres de la méthode de création (méthode constructeur) récupèrent ces arguments def __init__ (self, toto = "BOB", tata = "PARIS")
    Ils sont passés ensuite respectivement aux attributs d'instances self.identifiant et self.ville qui peuvent ensuite initialiser intervenant1.identifiant et intervenant1.ville.

    C'est bon?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par Mr ZEE Voir le message
    C'est bon?
    Vous essayez en visualisant ce qu'il se passe avec la commande magique "print"... Et si çà fait des choses que vous ne comprenez pas, postez le code et les questions que vous vous posez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mr ZEE Voir le message
    Je crée un objet intervenant1.
    Je fais ensuite un appel de l'objet = Intervenant et je lui passe les arguments qu'il attend ("BOB", "PARIS")
    Les paramètres de la méthode de création (méthode constructeur) récupèrent ces arguments def __init__ (self, toto = "BOB", tata = "PARIS")
    Ils sont passés ensuite respectivement aux attributs d'instances self.identifiant et self.ville qui peuvent ensuite initialiser intervenant1.identifiant et intervenant1.ville.

    C'est bon?
    Presque. Seule la partie en rouge est mal formulée. En fait, quand tu crées l'objet, il est alors créé en mémoire et ses membres "identifiant" et "ville" sont remplis avec les paramètres reçus. Ensuite cet objet qui est en mémoire est renvoyé et toi tu le récupères dans "intervenant1". Donc "intervenant1.identifiant" et "intervenant1.ville" ne sont pas initialisés "ensuite". Ils sont initialisés lors de la création de l'objet.
    Mais sinon c'est ça.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre actif
    Homme Profil pro
    ...
    Inscrit en
    Septembre 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2015
    Messages : 33
    Par défaut
    OK, intervenant1.identifiant et intervenant1.ville sont initialisés lors de la création de l'objet car dans la classe Intervenant les attributs d'instances self.identifiant et self.ville prennent respectivement pour valeur
    les paramètres toto et tata de la méthode constructeur.
    C'est limpide maintenant pour moi, en fait comme tu as du t'en rendre compte j'avais besoin de regarder sous le capot, merci de m'avoir fait partager ta "lampe de garage"
    J'ai jeté un œil sur ton tutoriel sur la programmation Shell, très instructif... en fait tu es vachement pédagogue comme mec

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 06/10/2015, 01h13
  2. Réponses: 2
    Dernier message: 28/11/2014, 15h21
  3. Instancier une classe dans un constructeur d'une autre classe ?
    Par ctobini dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/12/2012, 11h11
  4. [NHibernate] Classes et proxy, "qui est qui ?" "qui fait quoi" ?
    Par mitchairben dans le forum NHibernate
    Réponses: 0
    Dernier message: 08/10/2009, 12h03
  5. Réponses: 8
    Dernier message: 16/05/2008, 10h34

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