Maison >développement back-end >Tutoriel Python >Comment éviter les importations circulaires lorsque les classes dépendent les unes des autres ?
Éviter les importations circulaires en Python
En Python, des importations circulaires peuvent survenir lorsque deux ou plusieurs classes ou modules dépendent les uns des autres, conduisant souvent pour importer des erreurs. Pour éviter ce problème dans votre cas spécifique où vous souhaitez que deux classes prennent des instances l'une de l'autre comme arguments de constructeur, envisagez les approches suivantes :
1. Module de référence partagé :
Créez un module distinct (par exemple, reference.py) qui importe les deux classes et fournit des références à chacune :
# reference.py from class_a import ClassA from class_b import ClassB
Ensuite, dans vos définitions de classe, importez le module de référence et utilisez-le pour accéder aux instances de l'autre classe :
# class_a.py from reference import ClassB class ClassA: def __init__(self, class_b_instance): self.class_b_instance = class_b_instance
2. Classe de base abstraite (ABC) :
Définissez une classe de base abstraite pour l'interface commune entre vos classes et demandez aux deux classes d'implémenter cette interface :
# abc.py from abc import ABC, abstractmethod class Base(ABC): @abstractmethod def get_instance(self): pass
# class_a.py from abc import ABC from reference import ClassB class ClassA(Base): def __init__(self, class_b_instance): self.class_b_instance = class_b_instance def get_instance(self): return self.class_b_instance
3. Modèle d'adaptateur :
Créez une classe d'adaptateur qui convertit les instances d'une classe en interface de l'autre classe :
# adapter.py class Adapter: def __init__(self, instance): self.instance = instance def get_instance(self): return self.instance
Ensuite, dans vos définitions de classe, utilisez l'adaptateur pour envelopper les instances de l'autre classe :
# class_a.py from adapter import Adapter from reference import ClassB class ClassA: def __init__(self, class_b_instance): self.class_b_instance = Adapter(class_b_instance)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!