Dupliqué possible: strong>
Importations circulaires (ou cycliques) dans Python P>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. P>
xxx pré>
xxx pré> ceci ne fonctionne pas. Le fichier principal importe B et l'utilise ... non. Quelque chose avec les importations est faux. P>
erreur du fichier A Importerror: Impossible d'importer le nom B STRAR> P> blockQuote>
3 Réponses :
Il suffit d'importer des classes dans __ init __ code> méthode
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 class Vous pouvez également utiliser une classe de base courante et un test de test. P> P> a.py code>:
b code> ne sera pas importé avant d'instancier la classe
A code>, Au cours de laquelle le module a déjà été importé complètement par module
B code>. p>
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!
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
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 ...