Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-11-06 00:35:02
original
663 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion
# 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
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal