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 :

POO : méthode de classe imbriquée modifiant attribut d'une autre classe imbriquée.


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut POO : méthode de classe imbriquée modifiant attribut d'une autre classe imbriquée.
    Bonjour,

    C'est mon premier post sur le forum. J'ai lu les règles mais, si néanmoins mon post ne respectait pas les conventions du forum, n'hésitez pas à me le faire savoir.

    Je suis en train d'écrire une lib python utilisant les codes ANSI. Je n'ai trouvé aucune solution pour récupérer la réponse au code ANSI \033[6n (renvoie la position du curseur).

    J'ai donc écrit une solution de remplacement :

    J'initialise une classe Screen contenant elle même deux classes imbriquées, l'une d'elle contient deux attributs (lignes et colonnes) l'autre des méthodes pour déplacer le curseur (up, down, right, left), comment puis-je faire pour que les méthodes de la deuxième classe imbriquée puisse modifier les attributs de la première (me permettant ainsi de toujours avoir la position du curseur) ?

    (En fait, il y a d'autre classes (imbriquées) qui doivent modifier les attributs lignes, colonnes.)

    Voici mon code au complet sur pastebin : http://pastebin.com/CRfJzhBz

    Les classe imbriquées sont elle nécessaires dans ce cas ?
    Merci d'avance.

    Edit : Sauriez-vous où je puis trouver un tuto/cours sur les classes imbriquées ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,
    Citation Envoyé par In.Abysso Voir le message
    Je suis en train d'écrire une lib python utilisant les codes ANSI. Je n'ai trouvé aucune solution pour récupérer la réponse au code ANSI \033[6n (renvoie la position du curseur).
    Sur Linux, le module curses est inclus en standard. Pour Windows vous avez des bibliothèques externes.
    A défaut d'utiliser ces bibliothèques, vous pouvez regarder comment cette fonctionnalités a été réalisée.

    Citation Envoyé par In.Abysso Voir le message
    Les classe imbriquées sont elle nécessaires dans ce cas ?
    Edit : Sauriez-vous où je puis trouver un tuto/cours sur les classes imbriquées ?
    Quel problème essayez-vous de résoudre? Pourquoi les classes imbriquées vous semblent être la solution?
    La POO n'est pas spécifique à Python. Pour des cours/tutos sur le sujet, il faut plutôt allez voir du côté de la rubrique ALM.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse.
    D'une façon plus générale, j'essaie avec cette lib de mieux comprendre la POO en général et le fonctionnement des classes imbriquées en particulier.

    Je connais le module curses, mais le but n'est pas tant de produire quelque chose de fonctionnel que de bien comprendre la POO sous python; si il s'agissait d'un logiciel de production, j'utiliserais bien évidement curses que j'ai déjà eu l'occasion de découvrir.

    En fait, je ne comprend pas comment deux classes imbriquées dans un autre peuvent interagir entre elles...

  4. #4
    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,

    Est-ce ceci que tu veux dire:
    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
     
    class Screen:
        def __init__(self):
            print('\033c')
            self.screen_size =  ScreenSize()
            self.cursor = self.Cursor(self)
            self.position = self.Position()
            self.current_line = 0
            self.current_column = 0
     
    class Cursor:
        def __init__(self, screen):
            self.screen = screen
        def up(self, n=1):
            print("\x1b[{n}A".format(n=n), end='')
            self.screen.current_line -= 1
        def down(self, n=1):
            print("\x1b[{n}B".format(n=n), end='')
            self.screen.current_line += 1
        def left(self, n=1):
            print("\x1b[{n}C".format(n=n), end='')
            self.screen.current_column -= 1
        def right(self, n=1):
            print("\x1b[{n}D".format(n=n), end='')
             self.screen.current_column += 1
    ?

    Par contre pourquoi les imbriquer ? Personnellement, je n'en vois aucune raison.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui, ceci correspond bien à ce que je veux faire

    Par contre pourquoi les imbriquer
    Eh bien, c'est que n'aie sans doute pas bien compris la POO. Je vais donc étudier votre exemple pour en comprendre le fonctionnement, déjà cela me semble plus clair

    Je tiens à préciser que je ne suis qu'un informaticien amateur et autodidacte, ni un pro, ni un étudiant en info, ceci expliquant mon manque de connaissances sur le sujet.

    En tout cas, un grand merci pour votre aide qui m'a été précieuse.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Les classes imbriquées n'ont pas beaucoup d'intérêt en Python, car elles n'ont aucun accès particulier à la classe englobante. C'est juste une façon d'organiser son code; en général cela signifie que la classe imbriquée n'est pas destinée à être instanciée directement hors de la classe englobante, mais il n'y a aucun mécanisme particulier du langage qui impose cette restriction.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui, ok. Je ne comprend quand même pas très bien comment on fait communiquer deux instances de classes instanciées dans un autre classe. Je vais continuer à chercher, tester, apprendre.
    En tout cas, ce forum/site est un mine d'informations :-)

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Citation Envoyé par In.Abysso Voir le message
    Je ne comprend quand même pas très bien comment on fait communiquer deux instances de classes instanciées dans un autre classe. Je vais continuer à chercher, tester, apprendre.
    Nombre de ces constructions sont décrites sous la forme de patrons de conceptions. Ils décrivent les constructions à réaliser en fonction des interactions qu'on souhaite obtenir.
    S'ils se mettent en œuvre différemment suivant le langage de programmation, un langage comme Python se contentera de documenter comment créer classes, attributs, méthodes et héritage. Autrement dit pas grand chose... Car savoir créer des classes ne dira pas quelles classes créer - comment découper votre problème/programme en classes - ni comment les relier/composer.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/11/2015, 02h56
  2. Accès aux attributs d'une autre classe
    Par alexmam15 dans le forum Débuter
    Réponses: 5
    Dernier message: 25/02/2011, 09h26
  3. Réponses: 3
    Dernier message: 23/05/2009, 18h57
  4. Modifier un attribut représentant une autre classe
    Par piotrr dans le forum Hibernate
    Réponses: 6
    Dernier message: 13/05/2008, 11h58
  5. Réponses: 1
    Dernier message: 10/01/2007, 14h15

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