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 :

programmation orienté objet sos


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Par défaut programmation orienté objet sos
    Bonsoir

    j'essais le cour sur HACkETHIC une revue maitriser python

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Humain:
        def __init__(self):
            self.lat_geo=0
            self.lon_geo=0
            self.avoir_faim=1
            self.etre_fatigue=0
     
     
     
        def avancer(self):
            self.lat_geo = this.lat_geo + 1 #      :cry:
            print "Ma latitude  :",self.lat_geo
    le probème dans avancer il y a this je ne comprend pas et sa ne fonctionne
    pas .
    quand j'ecris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.lat_geo = self.lat_geo + 1

    sa fonctionne

    l'erreur est
    de la revue ?
    de la version de python ?
    d'avance merci
    A+ Hervé

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par herve-59 Voir le message
    l'erreur est
    de la revue ?
    de la version de python ?
    d'avance merci
    A+ Hervé
    L'erreur vient de la revue : dans certains langages on utilise this et en Python c'est self qui est utilisé.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 705
    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 705
    Par défaut
    L'erreur vient de la revue.
    La raison profonde est "closure" ou plus prosaiquement toutes les variables accédées doivent avoir été instanciées et visible.
    Dit autrement, il sort d'où ce 'this'. Peut être de Java/C++ mal traduit?
    On est pas scotché à 'self', la prose ci dessous marche:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def avancer(this):
        this.lat_geo = this.lat_geo + 1
        print "Ma latitude :",this.lat_geo
    Mais s'il n'y a pas de bonne raison pour changer les conventions garder self
    Note: Python permet de définir des méthodes de classes, il n'est donc pas interdit ni idiot de voir des constructions dans le style:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @classmethod
    def foo(klass,...)

    Truc intéressant, dans la construction:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Humain:
        def __init__(self):
            self.lat_geo=0
            self.lon_geo=0
            self.avoir_faim=1
            self.etre_fatigue=0
    les variables d'instances sont initialisées par des constantes à la création de l'instance.
    En Python, on peut écrire cela ainsi:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Humain:
        lat_geo=0
        lon_geo=0
        avoir_faim=1
        etre_fatigue=0
        def __init__(self):
             pass
    Un accès a self.lat_geo retournera 0 mais une modification de self.lat_geo gardera Humain.lat_geo inchangé.
    En espérant vous avoir été agréable
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Par défaut
    OK merci pour vos réponses

    je vais essayer d'assimiler tout ça !

    c'est pas gagné

    A+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Salut !

    Citation Envoyé par wiztricks Voir le message
    Truc intéressant, dans la construction:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Humain:
        def __init__(self):
            self.lat_geo=0
            self.lon_geo=0
            self.avoir_faim=1
            self.etre_fatigue=0
    les variables d'instances sont initialisées par des constantes à la création de l'instance.
    En Python, on peut écrire cela ainsi:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Humain:
        lat_geo=0
        lon_geo=0
        avoir_faim=1
        etre_fatigue=0
        def __init__(self):
             pass
    Un accès a self.lat_geo retournera 0 mais une modification de self.lat_geo gardera Humain.lat_geo inchangé.
    Intéressant, mais source d'erreur. Ce comportement n'est valide que pour des objets immutables.

    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
     
    In [76]: class Spam(object):
       ....:     a = []
       ....:
       ....:
     
    In [77]: s = Spam()
     
    In [78]: t = Spam()
     
    In [79]: s.a, t.a
    Out[79]: ([], [])
     
    In [80]: s.a.append('spam')
     
    In [81]: s.a, t.a
    Out[81]: (['spam'], ['spam'])
     
    In [82]: Spam.a
    Out[82]: ['spam']
    Il suffit juste de faire attention si ce comportement n'est pas celui désiré et, dans ce cas, retourner à la méthode "classique" : définir les variables d'instance dans la méthode __init__.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 705
    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 705
    Par défaut
    Je suis d'accord, c'est source d'erreurs.
    Mais Python permettant au programmeur de faire n'importe quoi, je ne vois pas de réponse correcte à de telles craintes sans passer par des langages compilés.

    Mon propos était d'illustrer le concept de "closure" en rebondissant sur le typo qui écrit this en lieu deself et illustrer que self accède par défaut aux variables de classes.
    - 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. Problème de programmation orientée objet
    Par dan65 dans le forum WinDev
    Réponses: 8
    Dernier message: 17/09/2006, 01h04
  2. Réponses: 2
    Dernier message: 30/03/2006, 14h48
  3. [C#] Comment correctement programmer orienté objet ?
    Par ChristopheOce dans le forum C#
    Réponses: 5
    Dernier message: 06/02/2006, 13h22
  4. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

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