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 :

argument de méthode avec valeur par défaut [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut argument de méthode avec valeur par défaut
    Bonjour a toutes et tous,
    concernant la méthode check avec des arguments définis par défaut
    je souhaiterai savoir s'il est possible de donner une valeur a un argument avec des variables ou attribut de Maclass

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Maclass:
        VAR1 = 0
     
        def __init__(self):
            self.var = ...
     
        def check(self, nb=self.VAR1, nb2=self.var):
            if nb .... or  nb2....:
    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par speedy_souris Voir le message
    avec des variables ou attribut de sa propre classe
    La classe est Maclass...

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

  3. #3
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    salut wiztricks,

    après une correction du corps du message est ce plus clair ?
    je souhaite faire un check sur de la valeur de la variable VAR1 et de la valeur de l'attribut var de la class Maclass...
    est ce qu'une fonction check serait plus adapter que la méthode check
    du point de vue de débutant dans l'apprentissage de python , je ne vois pas encore l’intérêt de l'un par rapport à l'autre

    merci de me guider

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par speedy_souris Voir le message
    après une correction du corps du message est ce plus clair ?
    Non car "self" est l'instance et non la classe.
    Après, si on écrit f(a=tutu), implicitement tutu devra être dans le scope englobant pour pouvoir être défini.
    Ce qui veut dire que pour une simple classe, les attribut par défaut d'une fonction/méthode devront être des variables globales (ou des littéraux)...

    Pour le reste, je comprends que vous essayez de touiller le truc pour trouver la solution à un problème... mais il serait préférable de commencer par décrire le problème que vous cherchez à résoudre..

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

  5. #5
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Mon objectif est le suivant,
    sur un robot en ligne qui doit répondre a une demande (API GOOGLE, API WIKIMEDIA) fait par un utilisateur lambda
    je souhaite gérer le comportement de la demande faite par l'utilisateur a savoir
    la politesse, la grossièreté, la compréhension de l'écrit ...
    pour faire simple je veux que l'utilisateur soit poli, courtois et qu'il utilise des mots correct (pas de langage sms, pas de grossièreté...)
    pas plus de 3 impolitesses,
    pas plus de 3 grossièretés
    pas plus de 3 formulations incorrectes
    pas de 10 demandes correctes qui se suivent
    sinon blocage des demandes pendant 24h00

    voila la partie qui pose soucis

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Quand je parlais du problème que vous cherchez à résoudre je parlais plutôt de celui qui vous a conduit à envisager des paramètres par défaut dans la méthode "check".

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

  7. #7
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    salut,
    ce qui m'a conduit a choisir les arguments par default ...
    je cherche a modifier des attributs de classe ou des attributs d'instances
    la solution d'arguments par defaut ne correspond pas a ce que je veux faire
    je me suis donc orienté naturellement sur des méthodes de classe
    je teste qu'une seule condition ==> "la politesse"
    a l’exécution du script j'ai l'erreur suivante (ligne 31) :
    str_data = ','.join([str_data(elem) for elem in data])
    NameError: free variable 'str_data' referenced before assignment in enclosing scope
    voici mon code :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    class Checks:
        """
           classe pour le test du comportement de l'utilisateur
        """
        nb_incomprehension = 0
        nb_incivility = 0
        nb_indecency = 0
        nb_request = 0
     
        def __init__(self):
            self.comprehension = False
            self.politeness = False
            self.rudeness = False
     
        @classmethod
        def numbers_data(cls, data):
            nb_incomprehension, nb_incivility, nb_indecency, nb_request = data.split(',')
            return cls(int(nb_incomprehension), int(nb_incivility), int(nb_indecency), int(nb_request))
     
        @classmethod
        def check_request(cls, request):
            if request == "bonjour":
                cls.comprehension = True
                cls.politeness = True
                data = [
                    cls.nb_incomprehension,
                    cls.nb_incivility,
                    cls.nb_indecency,
                    cls.nb_request+1
                ]
                str_data = ','.join([str_data(elem) for elem in data])
                cls.numbers_data(str_data)
     
                return cls()
     
     
    checking = Checks()
    request = input("bonjour, que puis je pour toi ? ==> ")
    Checks.check_request(request)
    print(checking.__dict__)
    print(Checks.__dict__)

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    pas sûr d'avoir compris la question, mais un mécanisme de fallback permet d'accéder aux attributs de class.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Foo:
     
        attribut_de_class  = 'hey!'
     
        def __init__(self,attribut_instance=None):
            if attribut_instance == None:
                self.attribut_instance = 'you'
            else:
                self.attribut_instance = attribut_instance
     
     
    bar= Foo()
    print(bar.attribut_instance,bar.attribut_de_class)
    # >>> you hey!

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Je ne comprends pas la logique de ce que vous voulez faire et c'est plein d'erreur basiques qui ne devrait pas être là (lorsqu'on se lance à programmer avec des "class" on n'est plus débutant).

    Pas besoin de "class" pour gérer 3 compteurs, une condition sur leur somme et 3 booléens.
    Les "class" ne vont pas résoudre les difficultés à exprimer ce que vous voulez: au contraire!

    Ceci dit un lecteur plus perspicace que moi aura peut être une idée, il vous suffit d'attendre qu'il se manifeste.

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

  10. #10
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par wiztricks
    ,

    Je ne comprends pas la logique de ce que vous voulez faire et c'est plein d'erreur basiques qui ne devrait pas être là (lorsqu'on se lance à programmer avec des "class" on n'est plus débutant).
    Comment apprendre a programmer sans tester , oui il ya des erreurs, oui je suis débutant, c'est en codant avec des erreurs que l'on apprend a coder,
    si on reste dans sa zone de confort, cela est que mon avis personnel on ne progresse pas, on ne maîtrise que ses acquis est rien de plus
    se fixer des objectif un peu plus haut que son niveau permet une évolution, ce qui est le plus important ce n'est pas le résultat mais le chemin utiliser pour résoudre les problématiques rencontrer
    pour gérer 3 compteurs, une condition sur leur somme et 3 booléens.
    c'est une idée que je vais parcourir...malgré le fait que le comptage est gérer avec la librairy REDIS cela risque d’être long a résoudre, mais j'ai tout mon temps pour apprendre ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les "class" ne vont pas résoudre les difficultés à exprimer ce que vous voulez: au contraire!
    je ne comprends pas python est tout objet on ne peut pas échapper aux classes si l'on peut dire.

    merci pour vos réponses !

  11. #11
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Concernant la gestion des compteurs selon mon objectif ,
    faire une somme sur les compteurs n'a pas de sens, partant du fait que la condition True de la résultante du premier compteur
    engendre le comptage des autres compteurs ... cela implique une gestion séparé des compteur
    mais il fallait que je le teste pour savoir !

    merci pour l'idée

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par speedy_souris Voir le message
    faire une somme sur les compteurs n'a pas de sens, partant du fait que la condition True de la résultante du premier compteur engendre le comptage des autres compteurs ...
    Très bien mais çà reste des compteurs, des conditions, et quelques fonctions...

    Les ranger dans une class, déclarer une valeur par défaut,... sont des améliorations d'un code initial qui n'a pas besoin de tout çà pour traduire fidèlement votre besoin.

    Après, il faudra peut être stocker/récupérer un état pour traiter une requête et revoir la mise en forme pour gérer cette "persistance".

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

  13. #13
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Salut,
    même si d'apparence, je donne l'impression de m'étaler sur un hors sujet
    vos pertinentes remarques et vos judicieux conseils m'aident néanmoins a y voir plus clair

    dans le principe, je récupère une liste de valeur de comptage selon le comportement d'un utilisateur
    que je traite dans une classe, conscient du fait que professionnellement c'est peut être une mauvaise pratique
    mais dans mon apprentissage, ce type d'exercice me permet de voir les différentes méthodologie liés aux classes

    voici un code certe bien imparfait mais un peu plus fonctionnel

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    class Checks:
        """
           classe pour le test du comportement de l'utilisateur
        """
        nb_incomprehension = 0
        nb_incivility = 0
        nb_indecency = 0
        nb_request = 0
     
        def __init__(self):
            self.comprehension = False
            self.politeness = False
            self.rudeness = False
     
        @staticmethod
        def int_to_str(data):
            for i, nb in enumerate(data):
                data[i] = str(nb)
            str_data = ','.join(data)
            return str_data
     
        @classmethod
        def str_to_int(cls, data):
            number = cls.int_to_str(data)
            nb1, nb2, nb3, nb4 = number.split(',')
            nb1, nb2, nb3, nb4 = int(nb1), int(nb2), int(nb3), int(nb4)
            cls.nb_incomprehension = nb1
            cls.nb_incivility = nb2
            cls.nb_indecency = nb3
            cls.nb_request = nb4
     
        @classmethod
        def check_request(cls, request):
            if request == "bonjour":
                cls.comprehension = True
                cls.politeness = True
                counting = [0,0,0,1]       
                cls.str_to_int(counting)
     
    print(Checks.__dict__)       
    request = input("bonjour, que puis je pour toi ? ==> ")
    Checks.check_request(request)
    print(Checks.__dict__)
    merci de votre aide

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par speedy_souris Voir le message
    voici un code certe bien imparfait mais un peu plus fonctionnel
    Passer une liste d'entiers à une méthode nommée str_to_int qui commence par appeler la méthode int_to_str pour en faire une chaîne de caractères qu'on reconvertit ensuite en nombre...

    C'est juste faire et défaire pour refaire sans grand intérêt (il y a des exos corrigés dans les tutos) et sans rapport avec la question initiale.

    Mais je comprends qu'apprendre, c'est parfois de grands moments de solitude où on a envie de causer, histoire de... mais le "chat" est bien plus approprié pour une discussion décousue qu'un forum de discussion.

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

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par speedy_souris Voir le message
    voici un code certe bien imparfait mais un peu plus fonctionnel
    Je ne pige pas trop ce qu'il doit faire mais...

    Citation Envoyé par speedy_souris Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        def int_to_str(data):
            for i, nb in enumerate(data):
                data[i] = str(nb)
            str_data = ','.join(data)
            return str_data
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Checks:
        """
           classe pour le test du comportement de l'utilisateur
        """
        nb_incomprehension = 0
        nb_incivility = 0
        nb_indecency = 0
        nb_request = 0
        __csv=","
     
        @classmethod
        def int_to_str(cls, data, csv=None):
            return (csv or cls.__csv).join(map(str, data))
    Et comme ça t'as un exemple de méthode avec argument par défaut.

    Citation Envoyé par speedy_souris Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        def str_to_int(cls, data):
            number = cls.int_to_str(data)
            nb1, nb2, nb3, nb4 = number.split(',')
            nb1, nb2, nb3, nb4 = int(nb1), int(nb2), int(nb3), int(nb4)
            cls.nb_incomprehension = nb1
            cls.nb_incivility = nb2
            cls.nb_indecency = nb3
            cls.nb_request = nb4
    Hum... le nom de cette fonction laisse penser qu'elle reçoit des str (c'est bien ça non ? str vers int !!!). Sauf que en fait dans son code tu passes ce qu'elle reçoit à int_to_str() donc quoi, en réalité elle reçoit des int ? Et qu'elle convertit au final en int ? Pas tiptop comme façon de nommer les choses. Un coup à se planter en beauté plus tard.

    Enfin, faisons comme si tout était normal...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        def str_to_int(cls, data):
            (
                cls.nb_incomprehension,
                cls.nb_incivility,
                cls.nb_indecency,
                cls.nb_request,
            )=data
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Bonjour, Sve@r
    c'est exactement ce que je voulais dans le principe !

    Grand merci pour ces infos

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

Discussions similaires

  1. [AC-2010] Ouvrir un sous formulaire via formulaire avec valeur par défaut
    Par Sami Xite dans le forum Access
    Réponses: 2
    Dernier message: 30/07/2010, 18h13
  2. Réponses: 1
    Dernier message: 11/07/2010, 13h34
  3. Record avec valeur par défaut
    Par Sancha dans le forum Langage
    Réponses: 30
    Dernier message: 16/12/2009, 12h09
  4. Réponses: 4
    Dernier message: 01/11/2008, 09h41
  5. Supprimer une colonne avec valeurs par défaut
    Par SlashOwnsU dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/09/2006, 10h10

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