GOOGLE ADS

Sonntag, 24. April 2022

Wie man zirkuläre Importe mithilfe von Referenzen oder Funktionen überwindet

Ich arbeite an einem bestehenden Projekt und um die Funktionalität der gesamten Anwendung nicht zu beeinträchtigen, ist eine Umstrukturierung der Anwendung nicht zulässig, was dazu führt, dass ich auf einige sehr lange zirkuläre Importprobleme stoße.

Ich wollte wissen, ob es eine Lösung wie für die Typprüfung gibt, mit der ich das Problem des zirkulären Imports für andere Dinge wie Callables oder Variablen umgehen kann.

Zum Beispiel:

from typing import TYPE_CHECKING
from somemodule import A # This is the line causing import issue.
if TYPE_CHECKING:
from somemodule import A # Solution for type checking.
def func() -> 'A': # This works
return 'A'(a=1, b=1) # But what can I do for this?

Jede Hilfe wäre sehr willkommen, vielen Dank im Voraus.

Der Fehler, den ich bekomme, ist entlang der Linien

 File "SomePath", line 5, in <module>
from somemodule import A
File "SomeOtherPath", line 6, in <module>
from nrelatedmodule2 import get_something
File "SomePath", line 20, in <module>
from relatedmodule1 import get_another_thing
File "SomeOtherPath", line 3, in <module>
from somemodule import A


Lösung des Problems

Es ist möglich zu prüfen, ob ein Name (zB A) definiert ist:

'A' in globals()

Wenn Sie dies verwenden, sollten Sie in der Lage sein, A zu importieren, wenn und nur wenn ein anderer Name nicht definiert ist:

if not module in globals():
import A

Oder importieren A, es sei denn, es wurde bereits importiert:

if not A in globals():
import A

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...