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éthodes spéciales dans les classes


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut Méthodes spéciales dans les classes
    Bonjour
    Ma question porte sur les méthodes spéciales définies dans les classes.
    Par exemple, on peut obtenir la longueur d'une chaîne de deux façons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(len("ab"))
    print("ab".__len__())
    Je crois avoir compris qu'en sous main, la fonction len appelle la méthode spéciale __len__ .
    Bien sûr, la ligne 1 est plus simple à taper que la ligne 2.
    Mais y a-t-il une raison plus profonde à la coexistence de ces deux techniques ?

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

    Citation Envoyé par badius1 Voir le message
    Mais y a-t-il une raison plus profonde à la coexistence de ces deux techniques ?
    len est la fonction (builtins) qu'on utilise.

    __len__ est la méthode correspondante de l'objet qui sera appelée (et à définir dans ses classes si ça fait du sens). Elle pourrait retourner autre chose qu'un entier (et dans ce cas len(...) plante).

    Est ce que vous écririez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> x = 1
    >>> x.__lt__(2)
    plutôt que:
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut
    Merci pour la réponse rapide.
    Si j'ai bien compris, l'utilisation de la fonction len n'est pas équivalente à l'utilisation de la méthode __len__ .
    Si dans une classe je décide que la méthode __len__ doit renvoyer par exemple une chaîne (c'est idiot ...) et si x est une instance de ma classe :
    me renverra ma chaîne, mais
    échouera, car la fonction len doit renvoyer un entier.
    D'après votre réponse, l'utilisation de la fonction a deux avantages sur celle de la méthode :
    1) il est plus agréable d'écrire len(x) que x.__len__(), cela donne un code plus joli, ou plus lisible
    2) len appelle __len__ , en attend un entier en retour et rue dans les brancards si ce n'est pas le cas.
    À part ces deux points, les deux techniques sont bien interchangeables ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Citation Envoyé par badius1 Voir le message
    À part ces deux points, les deux techniques sont bien interchangeables ?
    Elles aboutissent à exécuter la même méthode... donc on peut dire ça.


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

  5. #5
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut
    Ok, donc en définitive, dans le code, on utilise len à la place de __len__ dans un but presque esthétique ...

Discussions similaires

  1. [Python 3.X] Méthode appelant une autre méthode dans les classes
    Par zeddiccus dans le forum Général Python
    Réponses: 4
    Dernier message: 24/02/2019, 10h55
  2. Appel de méthodes dans les classes filles
    Par benef dans le forum Ruby
    Réponses: 1
    Dernier message: 07/02/2016, 11h12
  3. Générer (en code JAVA) la méthode equals dans les classes bindées par JAXB2
    Par greatmaster1971 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 11/12/2013, 16h55
  4. Utiliser les méthodes ror dans une class perso
    Par BakaOnigiri dans le forum Ruby on Rails
    Réponses: 10
    Dernier message: 01/02/2010, 12h01
  5. [preferences] pouvoir débuguer dans les classes de JAVA
    Par Satch dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 25/01/2006, 13h23

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