Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:circular_import

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
python:circular_import [2022/04/11 14:35]
root angelegt
python:circular_import [2022/04/11 15:43] (aktuell)
root [Circular Import wegen Typing]
Zeile 21: Zeile 21:
       * damit gibt es keinen Kreis mehr       * damit gibt es keinen Kreis mehr
  
 +
 +====== Circular Import wegen Typing ======
 +
 +  * kann umgangen werden in dem das Prüfen der Typ-Klassen erst nach dem laden der kompletten Module erfolgt
 +  * das importieren der Pakete/Module die die Typen enthalten erst beim Type-Checking erfolgt
 +      * notwendig da sonst bereits durch den import (der Interpreter weiß ja nicht das es nur für Type-Annotation geladen wird) der Circular Error entsteht
 +
 +
 +<sxh python>
 +from __future__ import annotation
 +from typing import TYPE_CHECKING
 +
 +if TYPE_CHECKING:
 +   import whateverlib resulting else in circular import
 +
 +rest of code
 +</sxh>
 +
 +  * Der Import von annotations von <code>__future__</code> sorgt dafür das die Prüfung der Klassen die für Typing angegeben sind erst auf Existenz geprüft werden nach dem das Modul komplett geladen worden ist (also alle Klassen bekannt sind)
 +      * ab Python 3.10 ist das Standart-Verhalten und nicht mehr notwendig
 +  * TYPE_CHECKING ist eine Konstante, die nur dann True ist wenn Typen geprüft werden, das heißt die Bibliothek wird auch nur in diesem Moment geladen und verursacht somit keinen Circular Import
  
  
  
python/circular_import.1649680526.txt.gz · Zuletzt geändert: 2022/04/11 14:35 von root