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 :

Tester si un objet est une fonction ou une méthode de classe


Sujet :

Python

Vue hybride

rambc Tester si un objet est une... 22/06/2009, 21h26
oiffrig Qu'appelles-tu méthode de... 22/06/2009, 22h27
rambc Je vais être plus précis.... 22/06/2009, 22h43
oiffrig Dans ce cas, tu pourrais... 22/06/2009, 22h48
Antoine_935 Dans cas cité au dessus par... 22/06/2009, 23h21
rambc Merci à tous les deux. Cela... 23/06/2009, 00h13
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Tester si un objet est une fonction ou une méthode de classe
    Salut,
    tout est dans le titre.

    Toute info. est la bienvenue.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Qu'appelles-tu méthode de classe ? Parmi quoi comme objets veux-tu comparer ?
    Quelques pistes :
    Une méthode (non statique) est de type 'instancemethod', alors qu'une fonction (ou une méthode statique) est du type 'function'
    L'attribut 'im_self' d'une méthode décorée avec @classmethod est une référence vers la classe, None pour une méthode classique. Sous forme un peu plus visuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fonction -- type() +-> 'function' -> Fonction ou méthode statique (@staticmethod)
                       +-> 'instancemethod' -- im_self +-> None -> Méthode
                                                       +-> Classe -> Méthode de classe (@classmethod)

  3. #3
    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
    Je vais être plus précis. J'ai une classe du type suivant :
    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
    class math_id():
        def __init__(self):
            self.alias = None
            self.numbVar = 0
            self.listNameVar = None
            self.litteral = True
            self.domDef = None
     
        def get_nameVar(self):
            if self.listNameVar == None:
                nbVar = abs(self.numbVar)
                if nbVar == 1:
                    self.listNameVar = ['x']
                elif nbVar == 2:
                    self.listNameVar = ['x', 'y']
                elif nbVar == 3:
                    self.listNameVar = ['x', 'y', 'z']
                elif nbVar > 3:
                    self.listNameVar = []
                    for i in range(nbVar):
                        self.listNameVar += ['x_' + str(i+1)]
     
            return self.listNameVar
    Dans un autre code j 'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    list_var_math_id = []
    for meth in dir(tool_Builder_Def.defCtFunc.math_id()):
        if not meth.startswith('__'):
            if str(getattr(tool_Builder_Def.defCtFunc.math_id(), meth))[0] <> '<' :
                list_var_math_id.append(meth)
    Je voudrais changer l'avant dernière ligne qui est un gros bricolage par quelque chose de plus propre qui me dise que get_nameVar n'est pas une constante présente dans __init__

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Dans ce cas, tu pourrais simplement vérifier que l'objet peut être appelé ? (présence de la méthode __call__)

  5. #5
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Dans cas cité au dessus par oiffrig, la fonction built-in callable peut t'aider.

  6. #6
    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
    Merci à tous les deux. Cela m'apprendra à ne même pas jeter un oeil sur le dir(...). Après cette auto-flagélation , je n'ai qu'un mot à dire : dodo.

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Ou est l'erreur - ou une différence entre une fonction et une macro ?
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 07h35
  3. [PHP-JS] une fonction dans une fonction
    Par lodan dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2006, 19h14
  4. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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