Wie vermeide ich zirkuläre Importe in Python?

|

Ich weiß, dass das Problem des zirkulären Imports in Python schon oft aufgekommen ist, und ich habe diese Diskussionen gelesen. In diesen Diskussionen wird immer wieder kommentiert, dass ein zirkulärer Import ein Zeichen für schlechtes Design ist und der Code reorganisiert werden sollte, um den zirkulären Import zu vermeiden.

Könnte mir jemand sagen, wie man einen zirkulären Import vermeidet in dieser Situation?: Ich habe zwei Klassen und ich möchte, dass jede Klasse einen Konstruktor (Methode) hat, der eine Instanz der anderen Klasse nimmt und eine Instanz der Klasse zurückgibt.

Genauer gesagt, eine Klasse ist veränderlich und man ist unveränderlich. Die unveränderliche Klasse wird zum Hashen, Vergleichen usw. benötigt. Die veränderliche Klasse wird auch benötigt, um Dinge zu tun. Dies ist vergleichbar mit Sets und Frozensets oder Listen und Tupeln.

Ich könnte beide Klassendefinitionen in dasselbe Modul packen. Gibt es andere Vorschläge?

Ein Spielzeugbeispiel wäre Klasse A, die ein Attribut hat, das eine Liste ist, und Klasse B, die ein Attribut hat, das ein Tupel ist. Dann hat Klasse A eine Methode, die eine Instanz von Klasse B nimmt und eine Instanz von Klasse A zurückgibt (durch Umwandlung des Tupels in eine Liste), und ähnlich hat Klasse B eine Methode, die eine Instanz von Klasse A nimmt und eine Instanz von Klasse B zurückgibt (durch Konvertieren der Liste in ein Tupel).

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method