Maison >développement back-end >Tutoriel Python >Comment puis-je résoudre les erreurs d'importation circulaire en Python ?

Comment puis-je résoudre les erreurs d'importation circulaire en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 03:27:09488parcourir

How Can I Resolve Circular Import Errors in Python?

Importations circulaires : comprendre la hiérarchie des importations

Cette erreur se produit lorsque les importations circulaires s'emmêlent et se déplacent plus loin dans la pile d'appels. Examinons les règles et explorons une solution à ce problème.

Importations circulaires : une mise en garde

Bien que Python autorise les importations circulaires, elles peuvent entraîner des problèmes lorsque les classes sont importés avant leurs définitions. Cela se produit parce que Python analyse de haut en bas et que les importations circulaires peuvent entraîner l'importation d'objets qui ne sont pas encore définis.

La hiérarchie d'importation

Pour résoudre les importations circulaires , comprenez la hiérarchie d'importation. Voici pourquoi l'importation de niveau supérieur a fonctionné :

  • Lorsque vous importez un monde depuis Simulator.py, le module World est chargé, qu'il ait ou non une importation circulaire.

Voici pourquoi les importations ultérieures ont échoué :

  • Lorsque vous importez Field depuis world.py, il tente d'importer le module field qui importe de manière circulaire goal.py. C'est là que l'erreur survient car goal.py n'a pas encore chargé la publication requise par field.py.

Solution : utilisez les importations absolues

Pour pour résoudre ce problème, utilisez des importations absolues. Cela signifie utiliser la syntaxe import my_module au lieu de la syntaxe from my_module import object. Cela garantit que les modules nécessaires sont chargés correctement.

Exemple spécifique

Dans votre cas, modifiez ces modules :

  1. entités /post.py : Changez pour importer la physique et utiliser physical.PostBody au lieu de PostBody.
  2. physics.py : Changez pour importer entités.post et utilisez entités.post.Post au lieu de Post.

Cela garantit un chargement correct des classes sans nécessiter qu'ils soient définis avant d'importer l'autre module.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn