Je suis nouveau à Python et je n'ai pas trouvé de réponse au problème suivant:
J'ai deux classes et je veux qu'ils utilisent des variables les unes des autres. Y a-t-il un moyen simple de faire cela parce que si je le fais comme si cette classe A ne sait pas que la classe B existe. et comment utiliser écraser les variables, le code suivant ne Travail: P> class a:
y=b.x
class b:
x=1
3 Réponses :
Vous exécutez Au lieu de cela, utilisez des fonctions dans les classes pour exécuter le code après em> le Les classes ont été définies: p> imprimé code> dans le cadre de la définition de la classe. Il s'exécute dès que Python voit cette ligne de code, avant qu'il ne soit lu la pièce sur
Classe B code>.
class A: y = 1 def foo(self): print B.x class B: x = 1 def bar(self): print A.y >>> A().foo() 2 >>> B().bar() 1 Use 'print' in some function definition.
Comme je l'ai dit dans un commentaire, votre code n'utilise pas d'utilisation efficace des classes. Voici ce que je pense que ce serait une meilleure approche qui offre plus de flexibilité pour travailler autour du problème de référence circulaire.
Premier la classe code> Définitions (qui suivent le PEP 8 Nommer les directives de la Convention): p>
# First create instances of each class, but link the second to the first
# when it's created.
a = A(1)
b = B(42, a) # Create and link to first.
# Then link the first to the second to complete the circular references.
a.linked_value = b.x
# Same result.
a.print_linked_value() # -> 42
b.print_linked_value() # -> 1
Merci pour cette réponse détaillée!
Vous pouvez utiliser une variable à partir de l'autre classe, mais la façon dont vous avez utilisé
impression code> est fausse. La classe ne gère pas directement
impression code>, mettez-la dans une fonction, puis appelez cette fonction à la place.
Comment utiliser des variables d'autres classes? Je reçois la nomError: le nom 'B' n'est pas défini
Dans votre dernier cas, définissez le
B code> en premier.
Vous n'utilisez pas vraiment de cours de manière efficace (c'est-à-dire comme s'il s'agissait de variables détenant une seule valeur). De manière générale, ils doivent être convaincus et utilisés comme modèles de code sans valeurs spécifiques attribuées à des attributs de classe, mais les instances d'eux utilisant l'argument
auto code> transmis à toutes les méthodes de la classe.
Mais si j'avais 3 cours avec différentes variables, disons que la classe A a une variable A, la classe B a une variable B et la classe C a une variable c. Maintenant, je veux mettre un in b, b dans C et C dans un y dans un il n'y aurait pas de possibilité?