Typhinweise in Python ohne zyklische Importe
Beim Versuch, eine große Klasse in zwei kleinere aufzuteilen, stoßen Sie auf das Problem der zyklischen Klasse Importe. Die „Haupt“-Klasse importiert die Mixin-Klasse und die Mixin-Klasse verweist in ihrem Typhinweis auf die „Haupt“-Klasse. Dies führt zu einem Importzyklus, der verhindert, dass die Typhinweise ordnungsgemäß funktionieren.
Um dieses Problem zu beheben, können Sie den folgenden Ansatz in Betracht ziehen:
<code class="python"># main.py from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from mixin import MyMixin class Main(object): def func1(self, xxx: Any): ...</code>
<code class="python"># mixin.py from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from main import Main class MyMixin(object): def func2(self: Main, xxx: Any): ...</code>
In diesem Beispiel Pythons TYPE_CHECKING Konstante wird verwendet, um die „Haupt“-Klasse bedingt zu importieren. Beim Ausführen des Codes wird die Importanweisung übersprungen, da die Konstante False ist. Typprüfungstools wie mypy interpretieren jedoch den Code innerhalb des if TYPE_CHECKING-Blocks und erkennen die Typanmerkung für func2.
Ein anderer Ansatz beinhaltet die Verwendung einer Vorwärtsreferenz:
<code class="python"># mixin.py from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from main import Main class MyMixin(object): def func2(self, xxx: 'Main'): ...</code>
Hier die Die Typanmerkung für func2 ist eine Zeichenfolge, die den Namen der Klasse darstellt, die später importiert wird. Beide Ansätze erfordern die Verwendung von Python 3.7 oder höher, um effektiv mit Typhinweisen zu arbeiten.
Bedenken Sie, dass die Verwendung von Mixins und Typhinweisen möglicherweise eine zusätzliche Strukturierung in Ihrem Code erfordert. Mypy empfiehlt beispielsweise, eine abstrakte Basisklasse (ABC) zu erstellen, von der sowohl Ihre „Haupt“- als auch Ihre Mixin-Klasse erben. Dies kann die Genauigkeit der Typprüfung verbessern.
Das obige ist der detaillierte Inhalt vonWie löst man zyklische Importe für Typhinweise in Python auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!