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 :

Acrobaties de variables


Sujet :

Python

  1. #1
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 79
    Points
    79
    Par défaut Acrobaties de variables
    Bonjour à tous,

    Depuis tout à l'heure j'ai réussi à faire la translation de programmes d'autres langages vers python.

    Parfait. J'ai progressé.
    Maintenant, savoir faire d'une manière c'est bien, mais j'aime la voltige.

    Ma question, qui semblera sûrement idiote, est de la masturbation intellectuelle.

    Soit fichier1 et fichier2, tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #! /usr/bin/python
    #coding:utf-8
     
    #FICHIER1
    import fichier2
     
    class maClasse1 :
        def __init__(self):
            '''mes définitions'''
        def roulebille():
            '''ici l'objet de la question'''
    Et fichier2, fille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #! /usr/bin/python
    #coding:utf-8
     
    #FICHIER2
     
    class maClass2(fichier1.maClasse1) :
     
      def __init__(self):
        fichier1.maClasse1.__init__(self)
     
      def cherche(self):
        '''ici pleins de variables locales'''
    La question c'est de savoir si je peux réutiliser des variables locales définies dans cherche(), du fichier2, dans une nouvelle fonction du fichier1.
    global ne m'a pas aidé.

    Actuellement, je règle le problème en passant par des variables "self" du constructeur que je récupère.

    Votre avis ?

    Merci à vous,

    A bientôt,

    LeHibou

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu l'a testé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #! /usr/bin/python
    #coding:utf-8
     
    #FICHIER2
     
    class maClass2(fichier1.maClasse1) :
    sans importer fichier1 ce sera difficile, et si tu importes fichier1 qui lui-même importe fichier2 tu crées une boucle d'import que Python rejetera immédiatement.

    Et puis pourquoi veux-tu faire cet héritage, est-il justifié ?

    Pour répondre à ta question:
    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
     
    #! /usr/bin/python
    #coding:utf-8
     
    #FICHIER1
    from fichier2 import maClass2
     
    class maClasse1(object):
        def __init__(self):
            '''mes définitions'''
     
        def roulebille(self):
            self.mc2 = maClass2()
     
            # Maintenant tu peux
            self.mc2.attribut_machin = 'foo'
            self.bar = self.mc2.attribut_chose
            # etc
    Tu remarqueras quelques corrections.

    Citation Envoyé par LeHibou2 Voir le message
    Actuellement, je règle le problème en passant par des variables "self" du constructeur que je récupère.
    Quoique la terminologie soit incorrecte, je crois comprendre ce que tu veux dire, c'est effectivement ainsi que l'on fait (donc comme dans mon exemple) et il est inutile de chercher une autre façon de faire.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 79
    Points
    79
    Par défaut
    Merci VinsS,

    Je dois avouer qu'hier je n'avais plus les yeux en face des trous.
    J'ai simplifié bêtement mon exemple et j'ai coupé des choses importantes.

    Je ne m'en rendais même plus compte.

    En tout cas, merci à toi,

    A bientôt,

    LeHibou

  4. #4
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 79
    Points
    79
    Par défaut
    Le plus simple étant -évidemment- de faire un return de la valeur de la fonction, voire un tuple, et de le réutiliser dans une variable temporaire...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Si maClass2 hérite de maClass1 alors tous les attributs sont accessibles suivant "self":

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A:
        def foo(self):
             print (self.a)
     
    class B(A):
        def __init__(self, a):
           self.a = a
     
    b = B(3)
    b.foo()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 79
    Points
    79
    Par défaut
    Oui, tu as raison, et je ne me permettrais pas de discuter cet état de fait.

    Mais j'ai changé d'avis quant à la nécessité de faire un héritage en vue de débugger plus simplement.

    Parce que le programme est devenu trop complexe avec des appels de partout et surveiller les variables ainsi que leur valeur d'appel devenait problématique.

    Résultat : mise à jour du design -> pas d'héritage mais du transfert de valeur à la voltige avec contrôle des itérations.

    Et là, l'air est revenu.

    Bonne soirée et bonnes fêtes à vous

    A bientôt,

    LeHibou

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    L'héritage te permet de faire ceci:
    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
     
    # -*- coding: utf-8 -*-
     
    class A(object):
        def __init__(self):
            pass
     
        def abrege(self, chain):
            return chain[:5] + '...'
     
    class B(A):
        def __init__(self):
            super(B, self).__init__()
     
        def format(self, st):
            if len(st) > 8:
                st = self.abrege(st)
     
            return st
     
    a = A()
    b = B()
     
    print b.format('Supercalifragilistisexpidilicious')
    où tu peux constater que B a hérité de la méthode abrege() de A.

  8. #8
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 79
    Points
    79
    Par défaut
    C'est très vrai VinsS,


    Tu as instancié "a" pour une raison particulière ?

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par LeHibou2 Voir le message
    Tu as instancié "a" pour une raison particulière ?

    Non, l'habitude.

  10. #10
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup de tes lumières,

    Elles me seront utiles dans un cas que je prévois.

    A bientôt,

    LeHibou

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2002, 13h32
  2. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  3. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08
  4. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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