8
votes

Résoudre une erreur d'importation circulaire dans Python

Dupliqué possible:
Importations circulaires (ou cycliques) dans Python

J'ai la classe B qui importe et crée des instances de classe A. Classe A a besoin de référence à B dans son contruceur et comprend donc b. xxx


xxx

ceci ne fonctionne pas. Le fichier principal importe B et l'utilise ... non. Quelque chose avec les importations est faux.

erreur du fichier A Importerror: Impossible d'importer le nom B


3 commentaires

Non, ça ne marche pas. Alors, ne fais pas ça.


Pas une réponse, mais il est probablement préférable d'avoir une meilleure conception qui ne nécessite pas cette importation circulaire.


Entendu. Mais cela semble être un problème fondamental. Classe a besoin de référence au niveau supérieur ...


3 Réponses :


2
votes

Il suffit d'importer des classes dans __ init __ méthode xxx


0 commentaires

18
votes

En dehors de "Ne faites pas cela, vous vous peignez dans un coin", vous pouvez également reporter l'importation de B jusqu'à ce que vous en ayez besoin. Fichier a.py : xxx

class b ne sera pas importé avant d'instancier la classe A , Au cours de laquelle le module a déjà été importé complètement par module B .

Vous pouvez également utiliser une classe de base courante et un test de test.


1 commentaires

Merci, j'irai avec ça. J'ai quelque part vu cette idée mais je ne pouvais pas comprendre. Votre explication supplémentaire est excellente!



1
votes

Le __ init __ code> méthode exécute lorsque vous créez une instance de la classe. Dans ce cas, vous devez le faire fonctionner en modifiant simplement les affirmations d'importation telles que ceci:

import b
class A:
  def __init__(self, ref):
    assert isinstance(ref, b.B)
    self.ref = ref


0 commentaires