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 :

Organiser les imports


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut Organiser les imports
    Bonjour à tous,

    En écrivant mon code, je me retrouve très souvent avec des imports cycliques (le module A importe le module B qui importe le module A). Je me débrouille pour que ca marche, mais je sais que c'est une pratique qui devrait être découragée.

    Existe-t'il des principes généraux de conception pour éviter que cela arrive, ou est-ce une chose à réaliser au cas par cas ?

    Voici quelques unes des raisons qui m'amènent à utiliser les imports cycliques et ce que j'imagine pouvoir faire pour l'éviter:

    - Detection de type: une méthode du module A utilise un if obj.__class__ = classe_derivee_dans_le_module_B. Je pourrais dériver la methode dans le module B, mais parfois ce if ne sert qu'a éviter une seule instruction et il est dommage d'avoir deux fonctions quasiment identiques (surtout que ce genre de if est surtout utilisé pour débugger)

    - Utiliser des petites fonctions simples. Dans ce cas, je suis censé creer un module C pour y mettre ces fonctions, et importer seulement ce module depuis B. Mais il est parfois plus naturel de mettre ces fonctions dans le module B (car les taches qu'elles réalisent sont intuitivement associées aux objets de B).

    Merci d'avance pour votre éclairage sur ce sujet.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par VV33D Voir le message
    Bonjour à tous,
    Salut,

    tout d'abord, je pense que ton thread serait plus à sa place sur la partie Conception de developpez.com.
    Mais bon, on peut voir ce qu'on va tirer de pythonesque du sujet.

    Citation Envoyé par VV33D Voir le message
    Existe-t'il des principes généraux de conception pour éviter que cela arrive, ou est-ce une chose à réaliser au cas par cas ?
    Généralement, le bon sens et la méthode "je regroupe dans un module des choses qui ont une unité" me suffisent.

    Citation Envoyé par VV33D Voir le message
    - une méthode du module A utilise un if obj.__class__ = classe_derivee_dans_le_module_B.
    o_O
    Alors, déjà, je déplacerais la fonction du module A vers le module B.
    Ensuite, s'il s'agit d'une méthode, il va falloir revoir ton approche de la POO car c'est totalement contradictoire avec l'esprit objet. Charge à la classe B de redéfinir la méthode pour gérer le cas particulier.
    Enfin, parlons un peu Python : si tu dois absolument effectuer le test, je te conseille de te servir de la fonction isinstance pour déterminer si un objet est d'une classe particulière.

    Citation Envoyé par VV33D Voir le message
    Je pourrais dériver la methode dans le module B mais parfois ce if ne sert qu'a éviter une seule instruction et il est dommage d'avoir deux fonctions quasiment identiques (surtout que ce genre de if est surtout utilisé pour débugger)
    A priori, je mettrais la partie de code "variable" dans une autre méthode qui serait appelée par la première, et c'est cette autre méthode que je réimplémenterais dans la classe fille :

    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
     
    class Spam(object):
     
        def methode_achement_importante(self):
            print "je débute !"
            self.petite_methode_de_debug()
            print "je termine !"
     
        def petite_methode_de_debug(self):
            print "je suis dans Spam !"
     
    class Eggs(Spam):
     
        def petite_methode_de_debug(self):
            print "je suis dans Eggs !"
    Citation Envoyé par VV33D Voir le message
    - Utiliser des petites fonctions simples. Dans ce cas, je suis censé creer un module C pour y mettre ces fonctions, et importer seulement ce module depuis B. Mais il est parfois plus naturel de mettre ces fonctions dans le module B (car les taches qu'elles réalisent sont intuitivement associées aux objets de B).
    Je suis désolé, je ne comprends rien à cette partie.
    Y-a-t'il vraiment une dépendance cyclique dans ce cas ?
    Le fait de rajouter un module ne te donne-t-il pas une dépendance cyclique à 3 parties (A dépend de B qui dépend de C qui dépend de A) ?
    Est-ce de l'injection de dépendance (ou de l'inversion de contrôle, la différence entre les 2, si elle existe, est beaucoup trop subtile pour moi) ?

    Ce que je craignais en début de message se révèle exact : le sujet ne concerne Python que "pour la forme" : les problèmes de dépendances cycliques sont communs à tous les langages (en tout cas, tout ceux que je connais).

    Demande plutôt de l'aide sur le forum conception.

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Il est possible de générer des graphes de dépendances. Voir par exemple:
    http://www.tarind.com/depgraph.html
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

Discussions similaires

  1. [PHP-FLASH] Recevoir et organiser les variables php
    Par arnaudrou dans le forum Flash
    Réponses: 6
    Dernier message: 02/08/2006, 11h41
  2. Comment organiser les fichiers de projet ?
    Par Zen_Fou dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 03/05/2006, 17h21
  3. Question sur les import
    Par zoullou dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2006, 21h37
  4. Prendre que les 5 premiers enregistrements (les + important)
    Par __fabrice dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/11/2005, 09h24
  5. [Plugin] Factoriser les import (gestion des import)
    Par Oliveuh dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/07/2004, 12h21

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