J'essaie de créer un module nécessitant des variables de la classe principale, j'ai donc importé lesdites variables au module, mais lorsque j'essaie de tester mon nouveau module en l'important dans la classe principale, il est dit qu'il peut " t Importez-le.
Il semble être parce que je importe la classe principale du nouveau module qui provoque le problème car chaque fois que je supprimais l'importation, cela ne fonctionne plus, mais il ne peut plus accéder aux variables de la classe principale nécessaire à la fonction. p>
la classe principale: p> le nouveau module: p> quand je cours le principal classe I obtenez ceci: p> et quand j'exécute le nouveau module, je reçois ceci: p> Traceback (most recent call last):
File "D:\.here\Computer Science\Computer Science Stuff\Python Projects\Mod.py", line 1, in <module>
from Main import variable1, variable2
File "D:\.here\Computer Science\Computer Science Stuff\Python Projects\Main.py", line 1, in <module>
from Mod import Mod
File "D:\.here\Computer Science\Computer Science Stuff\Python Projects\Mod.py", line 1, in <module>
from Main import variable1, variable2
ImportError: cannot import name 'variable1' from 'Main' (D:\.here\Computer Science\Computer Science Stuff\Python Projects\Main.py)
5 Réponses :
Vous pouvez mettre à jour MOD.TASK () pour recevoir deux paramètres supplémentaires, vous obtiendriez ainsi:
mod.task(variable1, variable2)
Votre problème ici est appelé " dépendance circulaire ". Main.py essaie d'importer une classe de mod.py, mais avant que cela puisse arriver, MOD doit importer des variables de Main.py, mais avant que cela puisse arriver ...
Généralement, le moyen de résoudre une dépendance circulaire est de réorganiser comment votre programme est aménagé. Par exemple, vous pourriez être en mesure de paramétrer le mod de telle sorte qu'il ne dépend plus de la principale. Par exemple: p>
main.py: p> mod.py: p> alternativement, Vous pouvez stocker variable1 code> et
variable2 code> dans un fichier différent. Trouver la meilleure solution dépendra de ce qui est le plus sens à votre programme. P> P>
Ceci est causé par la dépendance circulaire
comme mentionné dans la réponse ci-dessus, la manière de résoudre une dépendance circulaire consiste à réorganiser la manière dont votre programme est disposé. Utilisez strong> paramètres strong> p> Néanmoins, une solution de contournement simple pour cela consiste à faire < fort> main.py strud> p> mod.py strong> p>
Bien que ce code fonctionne, la dépendance circulaire est toujours présente: les deux modules peuvent toujours s'importer, ce qui entraîne un comportement inattendu. Votre code imprime en fait la réponse deux fois (!): Une fois pour importer le principal de MOD et une fois à partir de l'exécution de la principale.
Suivez les principes secs. Ne te répète pas.
Importation de variables "principales" dans MOD, provoque une dépendance circulaire. Quelque chose que vous devez éviter à tout prix. Utilisez la programmation d'objet orientale pour résoudre votre problème. p>
étapes pour résoudre le problème: strong> p> Changer la fonction de tâche pour permettre la transmission de deux arguments. Ça devrait être quelque chose comme ça p>
sur le script principal, appelez simplement la fonction: p>
Mod.task(variable1, variable2)
def task(self, variable1, variable2):
print(variable1 + variable2)
Je ne comprends pas ce que vous voulez dire en Java, de telles choses peuvent être faites ..
Mais c'est un peu possible dans Python concernant la règle que les corps des modules de référencement circuits doivent pouvoir exécuter sans accès aux autres modules concernés. par exemple. Ou gérer l'initialisation des modules avec des fonctions que vous appelez après la réussite de la chaîne d'importation.
Donc, vous pouvez faire:
Quoi qu'il en soit, mieux il est préférable d'éviter de telles choses une initialisation juste des classes et des fonctions d'appel avec des paramètres. P> p>
La source du problème peut être les importations récursives. Vous ne devriez pas faire d'importer deux fichiers les uns des autres
@Jammydodger Voulez-vous dire des importations circulaires?