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 :

classe en argument d'une fonction


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Points : 52
    Points
    52
    Par défaut classe en argument d'une fonction
    Bonjour developpeurs, developpeuses,

    J'ai deux fichiers Calcul.py et CodeUtilisateur.py
    Dans Calculs.py j'ai une classe Resultat et un appel a la fonction Initcodeutilisateur qui se trouve dans le fichier CodeUtilisateur.py.

    Je voudrais instancier la classe Resultat dans Initcodeutilisateur et je voulais savoir si il était possible de passer en argument à la fonction Initcodeutilisateur la classe résultat (je rappele que la fonction et la classe sont dans 2 fichiers différents !)

    Calcul.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try : from CodeUtilisateur import Initcodeutilisateur
    except : print "Erreur à l'initialisation code utilisateur - Syntaxe error"
     
    class Resultat():
        def __init__(self):
            pass
        def __call__(self, freq):
            print freq
            return '__call__'
     
    try:Initcodeutilisateur(class) #Je voudrais passer en argument la classe Resultat !
    except: print "Erreur à l'exécution de l'init du code utilisateur !"
    CodeUtilisateur.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def Initcodeutilisateur(Resultat()): #Ou Resultat est la classe Resultat !
        somme = Resultat()
        produit = Resultat()
    Ainsi, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try:Initcodeutilisateur(class)
    Va appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def Initcodeutilisateur(Resultat()):
    Qui va instancier la classe Resultat grace aux lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    somme = Resultat()
    produit = Resultat()
    Est-ce que c'est possible? Si oui, comment je peux faire svp?
    Merci d'avance pour vos réponses et vos conseils avisés !

    TeqPAF

  2. #2
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Oui, c'est tout à fait possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> class Test(object):
                def __init__(self):
                    foo=5
     
    >>> def foo(cls):
                print cls().foo
     
    >>> foo(Test)
    5
    Test est la classe, et Test() en est une instance.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Points : 52
    Points
    52
    Par défaut
    Merciiiii N.Tooooxxxxxx

    Voila un probleme résolu...
    Pour ne pas refaire un post je reviens vers vous pour la suite :
    J'appele ma fonction d'init:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    try : InitCodeUtilisateur(TM, ConteneurResultat)
            except: print 'ERROR'
    Avec un import avant...
    J'ai le script CodeUtilisateur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def InitCodeUtilisateur(TM, Resultat):
        TM.result.somme = Resultat('freq_TCCANCELREP')
        TM.result.produit = Resultat('freq_TCTDELREP')
    Ces deux lignes vont instancier la classe ConteneurResultat qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ConteneurResultat():
        def __init__(self, freq):
            self.freq = freq
            print 'la frequence est : ', freq
            pass
        def freq(self):
            return self.freq
        def __call__(self):
            return '__call__'
    A la sortie de cet "enchainement" (on va appeler ça comme ça), je voudrais récuppérer TM.result.somme.freq et TM.result.produit.freq.
    Le problème c'est que la partie initialisation est effectuée par l'utilisateur c'est lui qui écrit son script et qui déclare les variables qu'il veut (somme, produit, blabla, toto, tata, ...) il peut les appeler comme il veut !
    Donc je ne peux pas mettre directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    freq_somme = TM.result.somme.freq
    puisque je ne sais pas si sa variable il l'a appelé 'somme'...

    Comment je peux faire pour récupérer les fréquences relatives a chaque variable déclaré comme attribut de la classe ConteneurResultat?
    NB : Je ne peux pas non plus aller lire le code utilisateur !

    Est-ce que quelqu'un aurait une idée?

    Merci d'avance !

    TeqPAF

  4. #4
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Je dois avouer ne pas avoir compris... Serait-il possible d'inclure des lignes de doc style
    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
    def blabla(a,b):
        '''DEF:
            sert à additionner un nombre a à l'attribut foo de l'instance b
        IN:
            a <-- int|float|complex
            b <-- Foo object
        OUT:
            None'''
        b.foo+=a
     
    def Foo(object):
        '''Classe servant à définir un type d'objet,
        dont le but n'est autre qu'illustrer l'exemple'''
        def __init__(self, val):
            '''DEF:
                init de l'objet
            IN:
                val <-- int|float|complex
            OUT:
                None'''
        self.foo=val
    s'il te plaît ?

    Et puis dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ConteneurResultat():
        def __init__(self, freq):
            self.freq = freq
            print 'la frequence est : ', freq
            pass
        def freq(self):
            return self.freq
        def __call__(self):
            return '__call__'
    la partie en rouge est inutile (la orange aussi)
    Pour la partie en bleu, quel est le but ?

Discussions similaires

  1. Pb de passage d'argument dans une fonction de classe maison
    Par deusyss dans le forum Général Python
    Réponses: 10
    Dernier message: 18/03/2010, 02h14
  2. Passage d'argument dans une fonction d'une autre classe.
    Par lavince dans le forum Général Python
    Réponses: 5
    Dernier message: 13/09/2008, 22h16
  3. [Langage][Classe][Methode]Comment récuperer les arguments d'une fonction ?
    Par FremyCompany dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2006, 16h06
  4. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 20h15
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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