Maison  >  Article  >  développement back-end  >  Comment éviter les importations circulaires lorsque les classes dépendent les unes des autres ?

Comment éviter les importations circulaires lorsque les classes dépendent les unes des autres ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-06 00:35:02586parcourir

How to Avoid Circular Imports When Classes Depend on Each Other?

É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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn