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 :

fonctionnement de (*args,**kwds)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut fonctionnement de (*args,**kwds)
    bonjour ,
    j'essaie de comprendre le fonctionnement d'un programme python et j'ai pas compris la classe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class retourner:
     
        def __init__(self, object):
            self.object = object
     
        def __getattr__(self, name):
            def proxy(*args, **kwds): 
                getattr(self.object, name)(*args, **kwds)
                return self.object
            return proxy
    le ligne suivant me parait étrange, et j'ai rien saisi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getattr(self.object, name)(*args, **kwds)
    voici un appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Q=[] # Q est une liste d'objet
    ...
    return retourner(Q).sort()
    merci en avance de vos réponses et suggestions

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    dans la syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def proxy(*args, **kwds)
    args sera une liste contenant l'ensemble des valeurs données en argument et kwds sera un dictionnaire contenant les arguments donnés par mot-clé.

    Par exemple si tu appelles proxy de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    proxy( 1, "a", toto=2, titi="b")
    alors args prendra la valeur [1, "a"]
    et kwds prendra la valeur { "toto" : 2, "titi" : "b" }

    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getattr(self.object, name)(*args, **kwds)
    En fait, getattr(self.object, name) renvoie la méthode portant le nom name
    (le contenu de name plus précisément) de l'objet self.objet.
    Ensuite, cette méthode est appelée avec comme liste d'arguments principale args et comme arguments nommés kwd.

    Donc globalement, lorsque tu fais par exemple:

    Lorsque tu appelles une méthode sur l'objet b, l'objet b appelle la méthode portant le même nom et avec les mêmes arguments sur l'objet a.
    Donc b et a vont se comporter exactement de la même manière (du moins au niveau des appels de méthodes) et on aurait pu aussi bien faire

    L'avantage est que tu peux modifier le code de ta classe retourner pour ajouter des fonctionnalités.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class retourner:
         def __init__(self, object):
            self.object = object
     
        def __getattr__(self, name):
            def proxy(*args, **kwds): 
                print "la méthode %s a été appelée avec les arguments %s" % (name, args)
                getattr(self.object, name)(*args, **kwds)
                return self.object
            return proxy
    Ici, à chaque fois que tu appelleras une méthode sur l'objet b alors le nom de cette méthode ainsi que ses arguments seront écrits en sortie standard.

    En fait, cette classe est une implémentation du design pattern proxy.
    Tu devrais trouver pas mal de documentations dessus en utilisant Google.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Citation Envoyé par Biribibi Voir le message
    args sera une liste [...]
    un tuple

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    Oups, en effet, désolé

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour Biribibi,



    Intéressante réponse Biribibi; mais je voudrais te demander ce que tu entends dans cette phrase
    En fait, getattr(self.object, name) renvoie la méthode portant le nom name
    (le contenu de name plus précisément) de l'objet self.objet.
    par
    « contenu de name »


    Je subodore là dessous une notion de variable qui est erronée en Python. Es tu au courant qu'il n'existe pas de variables en Python ? Qu'entends tu par le terme de contenu ?

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 62
    Par défaut fonctionnement de (*args,**kwds)
    un très grand merciiii pour votre réponse Biribibi
    et j'attends votre réponse sur la question de eyquem
    merci encore

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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