0
votes

L'ordre des classes importe lorsque vous utilisez des variables les unes des autres

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. xxx pré>

et comment utiliser écraser les variables, le code suivant ne Travail: P>

class a:
    y=b.x

class b:
    x=1


5 commentaires

Vous pouvez utiliser une variable à partir de l'autre classe, mais la façon dont vous avez utilisé impression est fausse. La classe ne gère pas directement impression , 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 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 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é?


3 Réponses :


2
votes

Vous exécutez imprimé 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 .

Au lieu de cela, utilisez des fonctions dans les classes pour exécuter le code après le Les classes ont été définies: xxx


0 commentaires

0
votes
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.

0 commentaires

1
votes

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


1 commentaires

Merci pour cette réponse détaillée!