Wie vermeide ich zyklische Importe in Pythons Typhinweis?

Linda Hamilton
Freigeben: 2024-10-23 13:34:02
Original
201 Leute haben es durchsucht

How to Avoid Cyclic Imports in Python's Type Hinting?

Typhinweise in Python ohne zyklische Importe

Problem:

Beim Aufteilen einer großen Klasse In mehrere Dateien können zyklische Importe dazu führen, dass die Typhinweise nicht ordnungsgemäß funktionieren. Insbesondere beim Importieren der „Hauptklasse“ in eine Mixin-Klasse entsteht eine zirkuläre Abhängigkeit, die die Typprüfung behindert.

Lösung:

Für Python 3.4:

Verwenden Sie die folgende Codestruktur:

<code class="python"># main.py

import mymixin.py

class Main(object, MyMixin):
    def func1(self, xxx):
        ...

# mymixin.py

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: 'Main', xxx):  # Note the string type hint
        ...</code>
Nach dem Login kopieren

Die TYPE_CHECKING-Konstante stellt sicher, dass der Import von main.py nur während der Typprüfung ausgewertet wird, wodurch der zyklische Importfehler vermieden wird.

Für Python 3.7:

Python 3.7 führt eine elegantere Lösung ein:

<code class="python"># main.py

import mymixin.py

class Main(object, MyMixin):
    def func1(self, xxx):
        ...

# mymixin.py

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx):  # No need for a string type hint
        ...</code>
Nach dem Login kopieren

Der zukünftige Import von Anmerkungen ermöglicht Hinweise auf Zeichenfolgentypen und vermeidet die Auswertung zur Laufzeit.

Zusätzliche Überlegungen:

  • Mypy erfordert möglicherweise die Erstellung einer abstrakten Basisklasse (ABC), die sowohl von Main als auch von MyMixin geerbt wird, um dies sicherzustellen ordnungsgemäße Typprüfung.
  • Der Prüfer von PyCharm erfordert möglicherweise auch einen ähnlichen Ansatz für maximale Kompatibilität.

Das obige ist der detaillierte Inhalt vonWie vermeide ich zyklische Importe in Pythons Typhinweis?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!