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 :

Affectation de variables dans une classe [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Par défaut Affectation de variables dans une classe
    Bonjour,
    Question de débutant : dans le cas dépeint par ce script...
    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
    17
    18
    19
    20
    21
    22
    23
    # -*- coding: Utf-8 -*-
     
    # Classes
    class Eleve():
     
        def __init__(self, nom=None):
            self.__nom = self.__setNom(nom)
     
        def __nom(self):
            return self.__nom
     
        def __setNom(self, nom):
            if nom:
                self.__nom = nom.strip().upper()
     
        nom = property(fget=__nom, fset=__setNom)
     
    elv1 = Eleve()
    elv1.nom="cartman"
    print(elv1.nom)
     
    elv2 = Eleve("testaburger")
    print(elv2.nom)
    ...je voudrais comprendre pourquoi avec elv1 j'obtiens bien le nom alors qu'elv2 me renvoie None.
    Par contre, si je modifie la ligne 7, comme ceci...
    ...elv2 me renvoie bien le nom mais non mis en forme alors que je voudrais justement qu'il le soit.
    Quelqu'un pourrait-il m'expliquer ?
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par 7ohmZ Voir le message
    Quelqu'un pourrait-il m'expliquer ?
    Facile! Relisez votre code Eleve("testaburger") passe par __init__ et assigne à self.__nom le retour de la méthode/fonction __setNom (qui est None).

    Citation Envoyé par 7ohmZ Voir le message
    Question de débutant : dans le cas dépeint par ce script...
    Lorsque vous abordez les class et l'écriture de properties, vous n'êtes plus trop débutant. Il y a des bases que vous devez avoir acquis, sinon vous aller galérer grave.


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

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Par défaut
    Tout d'abord, merci d'avoir pris le temps de répondre.

    Citation Envoyé par wiztricks Voir le message
    Facile! Relisez votre code Eleve("testaburger") passe par __init__ et assigne à self.__nom le retour de la méthode/fonction __setNom (qui est None).
    - W
    J'ai bien compris le cheminement des données à travers la classe. Ce que je ne comprends pas, c'est pourquoi self.__setNom renvoie None lors de l'affectation de la valeur du nom au moment de la création de l'instance de classe, alors qu'il renvoie bien le nom en majuscule lors d'une affectation à posteriori.

  4. #4
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    elv2 = Eleve("testaburger")
    print(elv2.nom)
    Que fait ces lignes pour toi ?

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Par défaut
    Salut,
    Merci d'avoir pris le temps de me répondre.
    Cela crée une instance d'Eleve dans elv2 et affecte en même temps à la variable nom la valeur "testaburger".
    print(elv2.nom) renvoie la valeur de la variable privée self.__nom.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Il suffit de lire!

    Dans le cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    elv1 = Eleve()
    elv1.nom="cartman"
    __init__ assigne toujours None à self.__nom.
    mais la deuxième instruction appelle le setter qui assigne self.__nom directement.



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

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

Discussions similaires

  1. [ANT] affectation de variables dans une boucle
    Par dino_xrc dans le forum ANT
    Réponses: 6
    Dernier message: 17/12/2007, 19h47
  2. [PL/SQL]probleme affectation de variable dans une requete
    Par <% Bastien %> dans le forum SQL
    Réponses: 9
    Dernier message: 17/04/2007, 18h40
  3. [POO] Variable dans une classe
    Par Space Cowboy dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2007, 20h23
  4. Ajout d'une variable dans une class fait planter
    Par Geoff-sk8 dans le forum C++
    Réponses: 4
    Dernier message: 11/10/2006, 14h27
  5. Réponses: 2
    Dernier message: 17/12/2005, 20h52

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