Partage variables entre classe en PY
billyV33
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je ne comprend pas comment partager les données, variables, matrice et autres entre des classe séparée en plusieurs fichiers
Par exemple, j'ai deux classe. Classe1 et classe2. Dans classe1 j'ai une var SIZE que je veux passer à la classe 2 pour la réinitialiser avec un autre int. Comment puis-je transmettre entre plusieurs classe ce qui est nécessaire? Merci beaucoup
classe1, principale, le main:
Je ne comprend pas comment partager les données, variables, matrice et autres entre des classe séparée en plusieurs fichiers
Par exemple, j'ai deux classe. Classe1 et classe2. Dans classe1 j'ai une var SIZE que je veux passer à la classe 2 pour la réinitialiser avec un autre int. Comment puis-je transmettre entre plusieurs classe ce qui est nécessaire? Merci beaucoup
classe1, principale, le main:
import ttkbootstrap
from ttkbootstrap import *
from classe2 import Reinitialiser
class Application(ttkbootstrap.Window):
def __init__(self):
super().__init__()
self.SIZE = 5
self.TEMP_MAX = 1000
self.T = 100
self.A = 0.5
self.VITESSE = 50
self.c = 5
self.statutJouer = 0
self.cloneRemplir = False # utilise dans clone et appel grille depart
self.height = self.SIZE * self.c
self.width = self.SIZE * self.c
print("height hauteur ", self.height)
print("width largeur ", self.width)
self.matrice = [[0 for x in range(self.SIZE)] for y in range(self.SIZE)]
print(self.matrice)
# root window
self.fen1 = self.title("Logiciel de simulation d'un modèle Ising")
self.fen1 = self.geometry('900x600')
self.fen1 = self.style.theme_use(themename="superhero")
# Taille canvas MAX
self.can1 = Canvas(self.fen1, width=25, height=25, bg="aqua")
self.can1.pack(padx=5, pady=5)
print("application")
self.boutonGrilleDepart = tk.Button(self,
text='Reinitialiser',
command=Reinitialiser,
state=tk.ACTIVE)
self.boutonGrilleDepart.place(x=196, y=430)
if __name__ == "__main__":
app = Application()
app.mainloop()
</code >
<code>
# classe2 qui devrait pouvoir utiliser les variables, le can1 de la classe1
import ttkbootstrap
from ttkbootstrap import *
class Reinitialiser:
def __init__(self):
super().__init__()
self.SIZE = 8
# self.width = self.width
# self.height = self.height
# self.can1 = self.can1
print("Reinitialiser SIZE", self.SIZE)
self.matrice = [[1, -2, 1, -1, -1], [1, -2, 1, -2, -2],
[1, 1, -2, 2, -2], [1, 1, -1, 2, 2], [2, 2, 2, 2, -1]]
# print(self.width, self.height)
print(self.matrice)
Configuration: Linux / Firefox 91.0
A voir également:
- Partage variables entre classe en PY
- Partage de photos en ligne - Guide
- Meilleur site partage abonnement - Accueil - Services en ligne
- Partage d'écran whatsapp pc - Accueil - Messagerie instantanée
- Partage reseau - Guide
- Album partagé google - Guide
4 réponses
Rebonjour, j'ai aussi du mal à comprendre comment avec un constructeur sans nom, je pourrais construire un objet. Un peu perdu en Python Désolé! Merci beaucoup!
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
tes classes s'appellent Application et Reinitialiser.
tu as deux modules que tu appelles classe1 et classe2.
je me demandes si Reinitialiser ne devrait pas plutôt être une méthode de la classe Application.
pourquoi as-tu choisi de faire cela avec deux modules?
que veux-tu obtenir, en réalité?
tes classes s'appellent Application et Reinitialiser.
tu as deux modules que tu appelles classe1 et classe2.
je me demandes si Reinitialiser ne devrait pas plutôt être une méthode de la classe Application.
pourquoi as-tu choisi de faire cela avec deux modules?
que veux-tu obtenir, en réalité?
un exemple:
module1.py:
module2.py:
module2.py pourrait aussi être:
module1.py:
class classe1: def __init__(self): self.SIZE=123 def Reinitialiser(self): self.SIZE=456
module2.py:
import module1 app=module1.classe1() print(app.SIZE) app.Reinitialiser() print(app.SIZE)
module2.py pourrait aussi être:
from module1 import classe1 app=classe1() print(app.SIZE) app.Reinitialiser() print(app.SIZE)
Bonjour, J'ai testé et je comprends un peu mieux. Par contre, quand je veux transférer mes compréhensions dans le code suivant, je ne trouve pas comment faire en sorte d'appeler Redessiner dans redessiner.py à partir de application.py pour le clic bouton
Quelques questions: :)
1- pourquoi quand je change le constructeur __init__ d'application.py avec un nom, l'interface ne s'affiche pas en bleu avec le bouton?
2- est-ce que c'est une bonne façon de partager le code? Pour l'interface (application.py) avoir les boutons et tout ce que je vais mettre à l'ouverture de la fenêtre mais, appeler le code suite à l'appuie sur les boutons et d,autres événements sur d'autres fichiers?
Il y a t-il un logique de partage de rôle? est-ce que je suis obligé de faire toujours des classes ou je pourrais avoir des fichiers avec juste une ou quelques fonctions?
Désolé, je suis un peu perdu!
Voici mon code:
Quelques questions: :)
1- pourquoi quand je change le constructeur __init__ d'application.py avec un nom, l'interface ne s'affiche pas en bleu avec le bouton?
2- est-ce que c'est une bonne façon de partager le code? Pour l'interface (application.py) avoir les boutons et tout ce que je vais mettre à l'ouverture de la fenêtre mais, appeler le code suite à l'appuie sur les boutons et d,autres événements sur d'autres fichiers?
Il y a t-il un logique de partage de rôle? est-ce que je suis obligé de faire toujours des classes ou je pourrais avoir des fichiers avec juste une ou quelques fonctions?
Désolé, je suis un peu perdu!
Voici mon code:
import ttkbootstrap
from ttkbootstrap import *
class ClasseApplication(ttkbootstrap.Window):
def __init__(self):
super().__init__()
# root window
self.fen1 = self.title("Logiciel de simulation d'un modèle Ising")
self.fen1 = self.geometry('900x600')
self.fen1 = self.style.theme_use(themename="superhero")
self.can1 = Canvas(self.fen1, width=25, height=25, bg="aqua")
self.can1.pack(padx=5, pady=5)
self.SIZE = 5
self.TEMP_MAX = 1000
self.T = 100
self.A = 0.5
self.VITESSE = 50
self.c = 5
self.statutJouer = 0
self.cloneRemplir = False # utilise dans clone et appel grille depart
self.height = self.SIZE * self.c
self.width = self.SIZE * self.c
print("height hauteur ", self.height)
print("width largeur ", self.width)
print("application")
self.matrice = [[0 for x in range(self.SIZE)] for y in range(self.SIZE)]
self.boutonGrilleDepart = tk.Button(self,
text='Nouvelle grille',
# command= event clic bouton ???
state=tk.ACTIVE)
self.boutonGrilleDepart.place(x=196, y=430)
def getSize(self):
return self.SIZE
def getTemp(self):
return self.TEMP_MAX
def getT(self):
return self.T
def getA(self):
return self.A
def getVitesse(self):
return self.VITESSE
def getc(self):
return self.c
def getmatrice(self):
return self.matrice
def setSIZE(self, size):
self.SIZE = size
def setc(self, c):
self.c = c
def setmatrice(self, matrice):
self.matrice = matrice
if __name__ == "__main__":
app = ClasseApplication()
app.mainloop()
# appel à l redessiner.py
import application
from ttkbootstrap import *
class ClasseRedessiner(application.ClasseApplication):
def Redessiner(self):
print("matrice dans redessiner\n", len(self.matrice))
print("matrice dans redessiner:\n", self.matrice)
self.can1.delete(ALL)
t = 0
while t != self.width / self.c:
u = 0
while u != self.height / self.c:
x = t
y = u
if self.matrice[x][y] == -1:
self.can1.create_rectangle(x * self.c, y * self.c, x * self.c + self.c, y * self.c + self.c,
fill='blue')
elif self.matrice[x][y] == 1:
self.can1.create_rectangle(x * self.c, y * self.c, x * self.c + self.c, y * self.c + self.c,
fill='green')
elif self.matrice[x][y] == 2:
self.can1.create_oval(x * self.c, y * self.c, x * self.c + self.c, y * self.c + self.c, fill='red')
elif self.matrice[x][y] == -2:
self.can1.create_oval(x * self.c, y * self.c, x * self.c + self.c, y * self.c + self.c,
fill='yellow')
else:
self.can1.create_rectangle(x * self.c, y * self.c, x * self.c + self.c, y * self.c + self.c,
fill='grey')
u += 1
t += 1
# Redessiner.mainloop()
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
reprenant ton code de départ, suggestion pour le module classe2.py:
def Reinitialiser(self): self.SIZE = 8 # self.width = self.width # self.height = self.height # self.can1 = self.can1 print("Reinitialiser SIZE", self.SIZE) self.matrice = [[1, -2, 1, -1, -1], [1, -2, 1, -2, -2], [1, 1, -2, 2, -2], [1, 1, -1, 2, 2], [2, 2, 2, 2, -1]] # print(self.width, self.height) print(self.matrice)