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 :

Méthode appelant une autre méthode dans les classes [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Par défaut Méthode appelant une autre méthode dans les classes
    Bonjour,

    Je fais mes premières armes en poo et déjà un problème de débutant avec les classes, que j'ai honte d'exposer presque. J'ai défini deux méthodes, dont la seconde, volume, appelle la première, surfBase. Mais à l'exécution, surfBase n'est pas "vu". Voici le code.

    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
     
    class Pave():
        def __init__(self,a,b,c):
            self.a = a
            self.b = b
            self.c = c
     
        def surfBase(self):
            return self.a*self.b
     
        def volume(self):
            return self.c*surfBase(self)
     
    >>> pave1 = Pave(10,5,3)
    >>> pave1.volume() # retourne le massage : name 'surfBase' is not defined
    Un grand merci d'avance à celle ou celui qui m'apportera son aide... avec indulgence.

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

    Lorsque ligne 15, vous écrivez pave1.volume(), c'est pour appeler (les ()) comme méthode l'attribut "volume" de l'objet "pave1" i.e. la syntaxe est de la forme objet '.' attribut '.' '(paramètres)'.
    A la ligne 12, c'est pareil, sauf que l'objet est stocké dans "self".

    - 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
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Par défaut
    Ça y est, j'ai fait la correction. Votre aide m'a été précieuse car elle me permet de comprendre un aspect que je n'avais pas du tout saisi. Merci beaucoup !

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    il faut comprendre que l'argument self que l'on définit dans chaque méthode permet de donner accès à l'intérieur de ces fonctions l'instance avec ses attributs et méthodes.

    En appelant depuis votre instance pave1 une méthode cela va passer automatiquement l'instance en premier argument qui porte par convention le nom self.
    qui va donner ensuite accès aux attributs de votre instance.

    C'est donc le même principe à l’extérieur avec l'instance pave1 que depuis l'intérieur avec self.

    pour appeler une méthode dans une méthode il suffit de faire : self.method(arguments) sans avoir à passer self puisque l'instance self va le faire elle même.

    du coup pour corriger votre code :

    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 Pave():
        def __init__(self,a,b,c):
            self.a = a
            self.b = b
            self.c = c
     
        def surfBase(self):
            return self.a * self.b
     
        def volume(self):
            return self.c * self.surfBase()
     
    pave1 = Pave(10,5,3)
    pave1.volume()

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 31
    Par défaut Merci
    Merci mille fois YLC-1, avec un retard honteux, pour votre réponse et vos explications parfaites. Je ne l'avais tout simplement pas vue avant aujourd'hui.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/05/2017, 02h22
  2. appelle d'une méthode d'une autre classe dans ma classe
    Par EpiTouille dans le forum Débuter
    Réponses: 5
    Dernier message: 08/08/2013, 08h30
  3. SQLLOADER: appel à une autre table dans la clause when du CTL
    Par jamesleouf dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 28/03/2011, 09h29
  4. [PHP 5.3] [POO] Appel de méthode dans une autre méthode de la même classe
    Par LunaSev dans le forum Langage
    Réponses: 10
    Dernier message: 18/05/2010, 15h24
  5. appelé une autre méthode problem des érreurs
    Par aefmaaradji84 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 28/07/2007, 22h29

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