+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 177
    Points : 51
    Points
    51

    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 :
    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 :
    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 957
    Points : 3 008
    Points
    3 008

    Par défaut

    Salut,

    Tu l'a testé ?
    Code :
    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 :
    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.
    Vincent
    Oqapy . Qarte . PaQager

  3. #3
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 177
    Points : 51
    Points
    51

    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 du Club
    Inscrit en
    mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 177
    Points : 51
    Points
    51

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 656
    Points : 8 554
    Points
    8 554

    Par défaut

    Si maClass2 hérite de maClass1 alors tous les attributs sont accessibles suivant "self":

    Exemple:
    Code :
    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

  6. #6
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 177
    Points : 51
    Points
    51

    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 Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 957
    Points : 3 008
    Points
    3 008

    Par défaut

    L'héritage te permet de faire ceci:
    Code :
    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.
    Vincent
    Oqapy . Qarte . PaQager

  8. #8
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 177
    Points : 51
    Points
    51

    Par défaut

    C'est très vrai VinsS,


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

  9. #9
    Expert Confirmé

    Homme Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 957
    Points : 3 008
    Points
    3 008

    Par défaut

    Citation Envoyé par LeHibou2 Voir le message
    Tu as instancié "a" pour une raison particulière ?

    Non, l'habitude.
    Vincent
    Oqapy . Qarte . PaQager

  10. #10
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 177
    Points : 51
    Points
    51

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •