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 :

Passer un attribut en argument de fonction


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Programmeur du dimanche
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Programmeur du dimanche
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Par défaut Passer un attribut en argument de fonction
    Bonjour à tous,

    Je me remets sérieusement à programmer après des années à me mettre en veille sur ce domaine (je suis amateur, ce n'est absolument pas une activité professionnelle).

    Je vous explique ma question.

    Je possède une classe dont les objets ont plusieurs attributs (admettons param1, param2 et param3 pour faire simple).
    J'aimerais faire une fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    class TEST:
     
    def __init__(self, a, b, c)
        self.param1 = a
        self.param2 = b
        self.param3 = c
     
    def function(self, text)
        #Code quelconque
        resultat = x + self.'txt'
        return resultat
    en gros, si je tape function(param1), je veux faire un test sur ce paramètre là, et donc être capable de faire également le test sur param2 et param3 et ainsi de suite. Comment faire ?
    J'ai cherché un peu partout, et apparemment il faudrait que je fasse une fonction par caractéristique, mais j'aimerais pouvoir n'en faire qu'une.

    A vous lire, merci d'avance.

    Otnas

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

    Vous pouvez utiliser getattr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            def f(self, text):
                 return x + getattr(self, text)
    mais je trouve cela quelque peu surdimensionné!

    Si vus avez une liste de paramètres assez semblables pour leur appliquer la même opération/fonction, autant en faire une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class TEST:
     
        def __init__(self, a, b, c)
              self.params = [ a, b, c ]
    Appliquer l'opération au ième élément de la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        def f(self, i):
             return x + self.params[i]
    peut se faire sans magie.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Programmeur du dimanche
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Programmeur du dimanche
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Par défaut
    Merci beaucoup !

    Je pense que je vais utiliser geattr(), car remettre mes paramètres en liste me ferait perdre leur noms assez explicites.
    Je préfère avoir un attribut avec un vrai nom que de savoir qu'il s'agit du paramètre numéro x d'une liste.

    Mais pourquoi est-ce surdimensionné ? Et du coup y aurait-il une autre solution pour que je récupère mes attributs ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Citation Envoyé par Otnas Voir le message
    Mais pourquoi est-ce surdimensionné ? Et du coup y aurait-il une autre solution pour que je récupère mes attributs ?
    Si c'est juste pour passer une chaîne de caractères plutôt qu'un entier, vous pourriez utiliser un dictionnaire.

    Vous pourriez aussi définir des variables param1, param2, param3 = 0, 1, 2 pour accéder à la position de vos éléments dans une liste par un "nom". Ce qui est plus pratique pour détecter les fautes de frappes au plus tôt: "parm1" est une chaine de caractères valide alors que parm1 est une variable non définie.

    getattr, setattr, ... sont des outils qui permettent l’introspection i.e. passer un peu à côté de l'interface normale qu'offre une classe. Si vous les utiliser par ignorance de solutions plus simples...

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Programmeur du dimanche
    Inscrit en
    Mars 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Programmeur du dimanche
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 4
    Par défaut
    Super merci pour la réponse. Je pense que l'idée du dictionaire ou de la liste est une bonne idée.

    Je viens du java appris pendant mes études il y a quelques années, alors les get et set sont un peu des secondes natures chez moi

Discussions similaires

  1. Passer une class comme argument de fonction
    Par Pelote2012 dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 07/08/2014, 12h03
  2. Passer une REGEX en argument de fonction puis en attribut
    Par helkøwsky dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/06/2013, 22h40
  3. Comment passer un tableau en argument de fonction
    Par Winnyls dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2009, 17h36
  4. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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