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 :

Objet réactif ?


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Retraité
    Inscrit en
    Avril 2004
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2004
    Messages : 74
    Points : 69
    Points
    69
    Par défaut Objet réactif ?
    Bonjour,

    Avec python3, est-il possible de définir un object avec des attributs et une méthode qui déclenche une action quand 1 ou plusieurs de ses attributs changent ?
    Je ne suis pas très performant avec le langage python, et je cherche... mais chercher, si ce n'est pas possible, me chagrine un peu...

    Merci pour les conseils que vous pouvez m'apporter.

    msuire
    j'aimerai savoir ...

  2. #2
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    bonjour,

    tu devrais peut être regarder du coté des Property, Accesseurs et Descripteurs

    un exemple rapide avec les property:

    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
    # coding: utf-8
    # python 3.6.4 x86_64
     
     
    class Foo:
     
        def __init__(self, val):
            self._val = val
     
        @property
        def val(self):
            return self._val
     
        @val.setter
        def val(self, val):
            if val != self._val:
                self.hello()
            self._val = val
     
        def hello(self):
            print("hello world")
     
     
    foo = Foo(10)
    foo.val = 15

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Une solution serait de passer par les propriétés. C'est une notion avancée de Python qui correspond, si je ne dis pas de connerie, au getter/setter d'autres langages comme Java.

    Exemple:
    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
    class MyClass():
     
        def __init__(self):
            self._arg = None
     
        @property
        def arg(self):
            print('Calling the getter')
            return self._arg
     
        @arg.setter
        def arg(self, value):
            print('Calling the setter')
            self._arg = value
     
    obj = MyClass()
    print(obj.arg)
    obj.arg = 10
    print(obj.arg)
    J

    EDIT
    Je vois que j'ai été devancé.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Il est possible de redéfinir des types d'objets simples permettant d'implémenter des descripteur/méthode comme __set__ qui sert à affecter une nouvelle valeur à l'attribut.

    Voici un exemple :
    https://docs.python.org/3/howto/desc...riptor-example

    Et un cours de Sam&Max très complet sur le sujet : http://sametmax.com/les-descripteurs-en-python/


    Voici un exemple concret :

    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
    class Solde(object): # {
        def __init__(self):
                self.value = 0
     
        def __get__(self, *args):
                return self.value
     
        def __set__(self, *args):
                self.value = args[1]
                if self.value < 0:
                        print("solde < 0 !")
    # }
     
    class Compte(object): # {
        solde = Solde()
    # }
     
    p = Compte()
    print(p.solde)
     
    p.solde = 1
    print(p.solde)
     
    p.solde -= 1
    print(p.solde)
    p.solde -= 1
    print(p.solde)
     
    p.solde = 0
    Lorsque la valeur du solde passe en dessous de 0 alors le message apparaît : solde < 0 !

    Ainsi pas besoin de faire un méthode pour vérifier la valeur chargée c'est fait automatiquement.

  5. #5
    Membre du Club
    Profil pro
    Retraité
    Inscrit en
    Avril 2004
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2004
    Messages : 74
    Points : 69
    Points
    69
    Par défaut Super!
    Je vous remercie tous les trois de votre éclairage...

    Je devrais m'en sortir pour ce que je veux tenter.

    MSuire
    j'aimerai savoir ...

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

Discussions similaires

  1. Notion de boucles dans Business Object
    Par lionelEIGIP dans le forum Deski
    Réponses: 1
    Dernier message: 08/04/2004, 11h26
  2. Réponses: 2
    Dernier message: 30/01/2004, 14h07
  3. [DDL] "object <table> is in use"
    Par TMuet dans le forum SQL
    Réponses: 4
    Dernier message: 26/01/2004, 10h18
  4. Réponses: 8
    Dernier message: 21/11/2003, 18h38
  5. Comment inserer des donnee de type Large Object !!
    Par josoft dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/07/2003, 11h21

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