Heim  >  Artikel  >  Backend-Entwicklung  >  Wie vermeidet man zirkuläre Importe, wenn Klassen voneinander abhängen?

Wie vermeidet man zirkuläre Importe, wenn Klassen voneinander abhängen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 00:35:02588Durchsuche

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

Vermeiden zirkulärer Importe in Python

In Python können zirkuläre Importe entstehen, wenn zwei oder mehr Klassen oder Module voneinander abhängig sind, oft in führender Reihenfolge Fehler importieren. Um dieses Problem in Ihrem speziellen Fall zu vermeiden, in dem zwei Klassen Instanzen voneinander als Konstruktorargumente verwenden sollen, ziehen Sie die folgenden Ansätze in Betracht:

1. Gemeinsames Referenzmodul:

Erstellen Sie ein separates Modul (z. B. reference.py), das beide Klassen importiert und Verweise auf jede bereitstellt:

# reference.py
from class_a import ClassA
from class_b import ClassB

Dann in Ihren Klassendefinitionen Importieren Sie das Referenzmodul und verwenden Sie es, um auf Instanzen der anderen Klasse zuzugreifen:

# class_a.py
from reference import ClassB

class ClassA:
    def __init__(self, class_b_instance):
        self.class_b_instance = class_b_instance

2. Abstrakte Basisklasse (ABC):

Definieren Sie eine abstrakte Basisklasse für die gemeinsame Schnittstelle zwischen Ihren Klassen und lassen Sie beide Klassen diese Schnittstelle implementieren:

# 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. Adaptermuster:

Erstellen Sie eine Adapterklasse, die Instanzen einer Klasse in die Schnittstelle der anderen Klasse konvertiert:

# adapter.py
class Adapter:
    def __init__(self, instance):
        self.instance = instance

    def get_instance(self):
        return self.instance

Verwenden Sie dann in Ihren Klassendefinitionen den Adapter, um Wrap-Instanzen der anderen Klasse:

# 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)

Das obige ist der detaillierte Inhalt vonWie vermeidet man zirkuläre Importe, wenn Klassen voneinander abhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn