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 :

Utilisation d'une fonction à l'intérieur d'une classe [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut Utilisation d'une fonction à l'intérieur d'une classe
    Bonjour,

    Je voulais utiliser une fonction appelée Increment à l'intérieur d'une classe pour incrémenter aussi bien des valeurs en x ou en y. (d'ou une fonction pour le faire sur les deux coordonnées)
    Cette fonction se trouve elle même dans la méthode Lancement_Operation()
    Mais l'interpréteur ne reconnait pas la fonction Increment ni ma référence à l'objet self.
    C'est sur la ligne suivante du coup que j'ai l'erreur :
    self.PositionX=Increment(self.PositionX)
    (undefined name Increment)
    (undefined name self)


    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
    24
    class UneCellule:
        Nbre_Objet=0
        def __init__(self):
            self.nom="Cellule"
            UneCellule.Nbre_Objet +=1
            self.PositionX=np.random.normal(3, 2, 1)
            self.PositionY=np.random.normal(5, 2, 1)
     
        def Increment(Position):
            print("test increment")
            Position_initiale=Position+np.random.normal(0, 2, 1)
            while (Position_initiale<10) & (Position_initiale>0):
                Position_initiale=Position+np.random.normal(0, 2, 1)
            return Position_initiale
     
     
        def Lancement_Operation():
            for i in range(1,10):
                self.PositionX=Increment(self.PositionX)
                print("infos apres lancement x")
                print(UneCellule.PositionX)
                self.PositionY=Increment(self.PositionY)
                print("infos apres lancement y")
                print(UneCellule.PositionY)

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

    Increment est une variable, par défaut globale.
    self.Increment serait l'attribut de l'objet "self".
    La différence entre une fonction et une méthode, c'est qu'une méthode est associée à un objet.

    Pour les détails, il faut prendre le temps d'ouvrir un tuto.

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

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    Euh, j'ai bien défini Increment en tant que fonction et pas en variable.
    Qu'est ce qui cloche ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par comme de bien entendu Voir le message
    Euh, j'ai bien défini Increment en tant que fonction et pas en variable.
    "Increment" est une variable que Python ira chercher dans l'espace de nom du module. Si vous voulez qu'il la cherche dans l'espace de noms de la classe, il faut le préciser avec le nom de la classe devant.

    Citation Envoyé par comme de bien entendu Voir le message
    Qu'est ce qui cloche ?
    Votre code ne peut pas fonctionner parce que vous ne maîtrisez pas les bases et que vous vous mélangez allègrement les pinceaux dans les différents types d'attributs et de variables. Et vous avez plein de tutos. qui expliquent tout çà très bien...

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

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    On ne peut pas écrire une fonction indépendamment dans la classe ? C'est dommage.
    C'était quand même le but de la manoeuvre.
    Dans d'autres langages c'était les doigts dans le nez...

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par comme de bien entendu Voir le message
    On ne peut pas écrire une fonction indépendamment dans la classe ? C'est dommage.
    C'était quand même le but de la manœuvre.
    Dans d'autres langages c'était les doigts dans le nez...
    Avec Python, on fait à peu près tout ce qu'on veut, à condition d'en respecter les règles. C'est la même chose dans les autres langages.

    Le plus courant, c'est:
    - on ajoute une méthode au sein de la classe. Elle doit passer self comme 1er argument, et on l'appelle avec self.fonction(...) sans rappeler son 1er argument self. Grâce au 1er argument self, on peut appeler à l'intérieur de cette méthode tous les objets de l'instance de classe, et même en créer de nouveaux
    - ou on ajoute une fonction indépendante à l'extérieure de la classe. Elle est appelée normalement par son nom fonction(...), y compris à partir de l'intérieur de la classe.

    Il est techniquement possible de créer une fonction indépendante (et non une méthode) à l'intérieur d'une classe, mais je n'en ai jamais eu besoin et je n'en vois pas l'intérêt.

    Il s'agit de fondamentaux du langage: sans ça, on passe un temps fou à faire des programmes qui fonctionnent.

    Un bon tuto disponible en pdf et en français: https://python.developpez.com/cours/apprendre-python3/

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/10/2007, 17h18
  2. Réponses: 4
    Dernier message: 08/11/2005, 15h10
  3. ou mettre une structure utilisée par une classe
    Par grand's dans le forum C++
    Réponses: 10
    Dernier message: 28/07/2005, 18h53
  4. Réponses: 8
    Dernier message: 22/12/2004, 22h57
  5. Réponses: 2
    Dernier message: 18/05/2004, 14h12

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