Vous avez des importations mutuelles de premier niveau, ce qui est presque toujours une mauvaise idée.
Si vous devez vraiment avoir des importations mutuelles en Python, la façon de le faire est de les importer à l'intérieur d'une fonction :
# In b.py:
def cause_a_to_do_something():
import a
a.do_something()
Maintenant, a.py peut faire en toute sécurité import b
sans causer de problèmes.
(À première vue, il peut sembler que cause_a_to_do_something()
serait extrêmement inefficace parce qu'il fait une import
chaque fois que vous l'appelez, mais en fait le travail d'importation n'est effectué que la première fois. La deuxième fois et les fois suivantes que vous importez un module, c'est une opération rapide).
0 votes
Notez que votre question est très similaire à cette réponse. Apparemment, le code de cette réponse fonctionne, mais pas le vôtre ? stackoverflow.com/a/7336880/565879