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

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

Patricia Arquette
Freigeben: 2024-11-06 00:35:02
Original
665 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren
# 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
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage