Maison  >  Article  >  développement back-end  >  Comment éviter AttributeError dans les scénarios d’importation mutuelle en Python ?

Comment éviter AttributeError dans les scénarios d’importation mutuelle en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-20 13:06:30143parcourir

How to Avoid AttributeError in Mutual Import Scenarios in Python?

AttributeError : l'objet 'module' manque d'attribut dans le scénario d'importation mutuelle

En Python, une erreur courante se produit lors de la gestion des importations mutuelles entre modules. Prenons l'exemple suivant :

<code class="python"># a.py
import b

# Functions defined within a.py...

# b.py
import a

# Functions defined within b.py...</code>

Lors de l'exécution de a.py, l'erreur suivante peut se produire :

AttributeError: 'module' object has no attribute 'hi'

Cette erreur indique que a.py n'est pas en mesure d'accéder à l'attribut hi depuis le module b.py importé. Pour comprendre la raison de cette erreur, il est crucial de reconnaître les pièges des importations mutuelles de niveau supérieur.

En règle générale, les importations mutuelles sont découragées, car elles peuvent conduire à des dépendances circulaires et rendre le code moins maintenable. Au lieu de cela, Python recommande d'importer des modules dans des fonctions. Dans l'exemple donné, le problème peut être résolu en modifiant à la fois a.py et b.py comme suit :

<code class="python"># a.py
def import_b_and_call_hi():
    import b
    b.hi()

# Functions defined within a.py...

# b.py
def hi():
    print("hi")</code>

Maintenant, lorsque a.py est exécuté, il importera de manière transparente b.py et appellera la fonction hi depuis la fonction import_b_and_call_hi. Cette technique garantit que les importations mutuelles ne provoquent aucun problème de dépendance.

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