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!