„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie löst man zyklische Importe für Typhinweise in Python auf?

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

Veröffentlicht am 17.11.2024
Durchsuche:797

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 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:

# 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):
        ...
# 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):
        ...

In diesem Beispiel wird die TYPE_CHECKING-Konstante von Python 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:

# 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'):
        ...

Hier ist die Typanmerkung für func2 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 arbeiten zu können.

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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729656617 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3