Dans le domaine de la programmation Python, des dépendances circulaires peuvent survenir lorsque des modules tentent de s'importer les uns les autres. Comprendre le comportement de telles importations est crucial pour éviter les pièges potentiels.
Lorsque deux modules, disons foo et bar, s'importent mutuellement à l'aide de import foo et import bar, les importations réussiront de manière transparente car les deux modules sont entièrement chargés. et peuvent se référencer les uns les autres.
Cependant, des problèmes surviennent lors de l'utilisation de from importations, comme from foo import abc et from bar import xyz. Dans ces scénarios, chaque module nécessite que l’autre soit importé avant de pouvoir continuer. Cette dépendance cyclique entraîne une erreur d'importation.
Pour illustrer, considérons le code suivant :
# foo.py from bar import xyz def abc(): print(xyz.__name__) # bar.py from foo import abc def xyz(): print(abc.__name__)
Ce code déclenchera une ImportError car foo nécessite que bar soit importé avant de pouvoir exécuter le from import, mais bar nécessite également que foo soit importé en premier.
Pour gérer efficacement les importations circulaires, plusieurs solutions exister :
Haut du module ; non de ; Python 2 uniquement :
# foo.py import bar def abc(): print(bar.xyz.__name__) # bar.py import foo def xyz(): print(foo.abc.__name__)
Haut du module ; de ok ; relatif ok ; Python 3 uniquement :
# foo.py from . import bar def abc(): print(bar.xyz.__name__) # bar.py from . import foo def xyz(): print(abc.__name__)
Haut du module ; non de ; aucun parent :
# foo.py import lib.bar def abc(): print(lib.bar.xyz.__name__) # bar.py import lib.foo def xyz(): print(lib.foo.abc.__name__)
Bas du module ; attribut d'importation, pas de module ; de ok :
# foo.py def abc(): print(xyz.__name__) from .bar import xyz # bar.py def xyz(): print(abc.__name__) from .foo import abc
Haut de fonction ; de d'accord :
# foo.py def abc(): from . import bar print(bar.xyz.__name__) # bar.py def xyz(): from . import foo print(foo.abc.__name__)
Les importations d'étoiles, cependant, ne sont pas abordées dans les exemples fournis dans l'article original.
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!