Heim  >  Artikel  >  Backend-Entwicklung  >  Wie löse ich zyklische Importprobleme für Typhinweise mit Mixin-Klassen in Python?

Wie löse ich zyklische Importprobleme für Typhinweise mit Mixin-Klassen in Python?

Linda Hamilton
Linda HamiltonOriginal
2024-10-23 13:35:30775Durchsuche

How to Resolve Cyclic Import Issues for Type Hinting with Mixin Classes in Python?

Python Type Hinting ohne zyklische Importe

Problem:

Das Importieren von Modulen mit zyklischen Abhängigkeiten führt dazu Laufzeitausnahmen, wenn Typhinweise in Verbindung mit Mixin-Klassen verwendet werden.

Details:

In Python 3.4 ist eine Klasse in zwei Dateien aufgeteilt (main.py und mymixin .py), wobei mymixin.py eine Mixin-Klasse enthält, die von der Hauptklasse in main.py erbt (d. h. Klasse Main(object, MyMixin):). Typhinweise in den Methoden von MyMixin erfordern die Angabe des Rückgabetyps als „Main“, was zu einem zyklischen Importproblem führt.

Python 3.4-Lösung:

Um den zyklischen Import zu umgehen Beim Typhinweis wird ein benutzerdefinierter Ansatz mit einer Vorwärtsdeklaration verwendet. Durch die Verwendung der Konstante „TYPE_CHECKING“ aus dem Modul „typing“ wird die Importanweisung innerhalb des Typannotationsblocks zur Laufzeit ignoriert. Die Typanmerkung „Main“ wird auch in eine Zeichenfolge umgewandelt, um sie weiterzudeklarieren.

Python 3.7-Lösung (PEP 563):

Verwendung von „from Mit der Importanweisung von Futureimport annotations werden alle Typanmerkungen zu Zeichenfolgen und werden während der Laufzeitauswertung übersprungen, wodurch die Syntax der Forward-Deklaration sauberer wird.

Trotz dieser Problemumgehungen kann die Verwendung von Mixins mit Typhinweisen immer noch eine Umstrukturierung erfordern, um dies sicherzustellen dass sowohl die PyCharm- als auch die Mypy-Typprüfung wie erwartet funktioniert. Mypy empfiehlt, ein ABC zu erstellen, von dem sowohl die Haupt- als auch die Mixin-Klasse erben.

Das obige ist der detaillierte Inhalt vonWie löse ich zyklische Importprobleme für Typhinweise mit Mixin-Klassen in Python?. 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