Heim  >  Artikel  >  Backend-Entwicklung  >  Wie löst man zyklische Importe für Typhinweise in Python auf?

Wie löst man zyklische Importe für Typhinweise in Python auf?

Linda Hamilton
Linda HamiltonOriginal
2024-10-23 12:27:01393Durchsuche

How to Resolve Cyclic Imports for Type Hinting in Python?

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!

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