IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Question sur les classes


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut Question sur les classes
    Bonjour,

    J'apprend les classes, je commence à comprendre, j'ai ce code pour l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Cases:
        def __init__(self):
            self.nom = "A1"
            self.x=1
            self.y=1
            self.type = "Plaine"
            self.bonus = "Blé"
     
    a = Cases()
    print(a.nom)
    print(a.bonus)
    print(a.type)
    Ma question est comment rajouter d'autres caases (A2, A3, B1, B...), est ce que je doit rajouter une classe par case ou y a t-il un moyen de créer mes cases d'une autre façon en ne gardant qu'une seule classe (class Cases) ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Ragus1970 Voir le message
    Ma question est comment rajouter d'autres caases (A2, A3, B1, B...), est ce que je doit rajouter une classe par case ou y a t-il un moyen de créer mes cases d'une autre façon en ne gardant qu'une seule classe (class Cases) ?
    Il faut ouvrir un tuto. parce qu'une technique s'accompagne d'un vocabulaire (classe, attributs, instances, méthodes,...) qui vous permettra de penser avec les concepts qui leurs sont associés (et accessoirement mieux traduire ce que vous voulez réaliser dans un forum).
    Créer plusieurs instances de Cases est bien plus précis que dire "comment rajouter d'autres caases (A2, A3, B1, B...)". Mais c'est trop précis pour être certain que ce soit ce que vous voulez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Bonjour

    Attention à ne pas confondre instanciation et définition

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Class Cases:
        def __init__(self):
            self.nom = "A1"
            self.x=1
            self.y=1
            self.type = "Plaine"
            self.bonus = "Blé"

    Ici il s'agit de la définition de la classe
    C'est en quelque sorte un moule/modèle ... qui va être commun à tous les objets qu tu créeras en utilisant cette classe

    Ici tu créé un objet (on dit aussi une instance) de type Cases

    pour créé un autre objet de type Cases, il suffit de refaire la même chose

    Problème:
    tous les attributs(nom, x, y , type, bonus) de ta classe ont des valeurs prédéfinis
    donc a.nom et b.nom auront la même valeur

    Si tu souhaites pouvoir les faire varier, il y a 2 solutions :
    1) les modifier après instanciation
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a = Cases()
    a.nom  = "A2"

    2) Pouvoir définir ces valeurs à la création de l'objet
    Auquel cas, il faut changer un peu ta classe et mettre des paramètres au constructeur
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Class Cases:
        def __init__(self, nom):
            self.nom = nom
            self.x=1
            self.y=1
            self.type = "Plaine"
            self.bonus = "Blé"
     
    a = Cases("A1")
    b = Cases("A2")
    Le savoir est une arme alors soyons armés

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Merci pour vos réponses, comme vous l'avez deviné, je débute !

    Si j'ai bien compris, il vaut mieux que je fasse ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Cases:
        def __init__(self, nom,x,y,type,bonus):
            self.nom = nom
            self.x=x
            self.y=y
            self.type = type
            self.bonus = bonus
     
    A1 = Cases("A1",1,1,"Plaine","Blé")
    A2 = Cases("A2",1,2,"Forêt", "Gibier")
     
    print(A1.nom)
    print(A1.bonus)
    print(A1.type)
    print("")
    print(A2.nom)
    print(A2.bonus)
    print(A2.type)
    Ce qui renvoi :
    A1
    Blé
    Plaine

    A2
    Gibier
    Forêt

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Il n'y a pas de meilleurs façon de faire. Ça dépend du besoin

    En général, on implémente également les getter/setter pour lire/modifier les valeurs des attributs (et se forcer à respecter le principe d'encapsulation)
    Le savoir est une arme alors soyons armés

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Merci a tous, je comprend mieux les classes

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Désolé, j'ai une autre question :

    supposons une variable : varA elle sera soit à 1,2 ou 3

    suivant le même schéma que précédement si je tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print(A1.type)
    print(A2.type)
    print(A3.type)
    cela fonctionne mais je voudrais faire quelque chose comme cela :
    Ca ne fonctionne pas bien sûr, comment faire pour pouvoir choisir le type aléatoirement via varA selon sa valeur (1,2 ou 3)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Si j'ai bien compris A1, A2 et A3 sont des variables de type Cases ?

    A quoi te sert de vouloir utiliser varA ?


    Bien sur, il y a des solutions mais je ne vois pas dans quel cas c'est intéressant de faire ça
    Le savoir est une arme alors soyons armés

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Ragus1970 Voir le message
    Ca ne fonctionne pas bien sûr, comment faire pour pouvoir choisir le type aléatoirement via varA selon sa valeur (1,2 ou 3)
    Vous créez une liste appelée "var" pour y stocker vos Cases et vous pourrez récupérer var[0], var[1], var[2].

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    En fait je voudrais sortir un nombre aléatoire de 1 à 3 et appeler selon ce nombre soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(A1.type)
    print(A2.type)
    ou
    selon le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Cases:
        def __init__(self, nom,x,y,type,bonus):
            self.nom = nom
            self.x=x
            self.y=y
            self.type = type
            self.bonus = bonus
     
    A1 = Cases("A1",1,1,"Plaine","Blé")
    A2 = Cases("A2",1,2,"Forêt", "Gibier")
     
    print(A1.nom)
    print(A1.bonus)
    print(A1.type)
    print("")
    print(A2.nom)
    print(A2.bonus)
    print(A2.type)

  11. #11
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Merci wiztricks,

    J'ai essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var=["A1","A2","A3"]
    print(str(var[0]).type)
    et ça :
    print(var[0].type)

    mais la synthaxe est mauvaise, tu peut m'aider ?

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Salut,

    var est un tableau d'instances de la classe Cases.
    Lorsque tu écris var=['A1', 'A2'], tu crées un tableau var dont les éléments sont les chaines de caratères 'A1', 'A2'
    Pour y mettre des instances de Case, il te faut d'abord créer ces instances:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A1 = Cases("A1",1,1,"Plaine","Blé")
    A2 = Cases("A2",1,2,"Forêt", "Gibier")
    et ensuite les mettre dans ton tableau (sans les guillements ):
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Tu as surement mal compris le conseil de wiztricks
    Il te suggère de stocker tes instances dans une liste (voir code de Fifan31)
    Ensuite tu pourra faire du tri, du random .... les listes ont de nombreuses fonctionnalités
    Le savoir est une arme alors soyons armés

  14. #14
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Je suis pas sûr que l'on se comprend, en VBA (excel) pour faire une boucle et se connecter sur plusieurs cellules, j'inscrit cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For varA = 1 To 5
        Range("A" & varA ) = "truc"
    Next varA
    La variable varA me permet de me connecter ou d'inscrire sur plusieurs cellules de la colonne A selon la valeur de la variable varA (j'indique ("A" & varA ) au lieu de ("A1") par exemple si varA =1 bien sûr

    Je voudrais faire la même chose sous python : choisir la case selon la variable mais je ne veut pas les instancier car le tableau ira peut-être de A1 jusqu'a A99 par exemple, je ne me voit pas toutes les instancier, c'est pourquoi je voudrais utiliser une variable déja pour les lignes A (A1, A2, A3....A99).

    La variable me semblait une bonne idée

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Ragus1970 Voir le message
    Je voudrais faire la même chose sous python : choisir la case selon la variable mais je ne veut pas les instancier car le tableau ira peut-être de A1 jusqu'a A99 par exemple, je ne me voit pas toutes les instancier, c'est pourquoi je voudrais utiliser une variable déja pour les lignes A (A1, A2, A3....A99).
    Python est un langage très différent de VBA.
    Il faut apprendre à penser vos codes avec les structures de données de base du langage comme list et dict et écrire (par exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(var)):
         var[i] = ...
    Et si vous n'êtes pas encore à l'aise avec ces structures de bases, il faut prendre le temps d'ouvrir un tuto.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Bonjour wiztricks,

    Pour la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(var)):
         var[i] = ...
    ça j'ai bien compris, ce qui me bloque c'est : est ce que je peut utiliser une variable pour appeler une classe car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A1 = CasePlaine("A1",1,1)
    A2 = CasePrairie("A2", 1, 1)
    var2=["A1","A2","A3"]
    print(A1)
    print(var2[0])
    ne fonctionne pas, cela me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <__main__.CasePlaine object at 0x036A5CB0>
    A1
    Donc print(A1) fonctionne mais print(var2[0]) ne fonctionne pas et je trouve pas la bonne synthaxe.
    C'est pour appeler cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class CasePlaine:
        def __init__(self, nom,x,y):
            self.nom = nom
            self.x=x
            self.y=y

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par Ragus1970 Voir le message
    Bonjour,

    Je suis pas sûr que l'on se comprend, en VBA (excel) pour faire une boucle et se connecter sur plusieurs cellules, j'inscrit cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For varA = 1 To 5
        Range("A" & varA ) = "truc"
    Next varA
    La variable varA me permet de me connecter ou d'inscrire sur plusieurs cellules de la colonne A selon la valeur de la variable varA (j'indique ("A" & varA ) au lieu de ("A1") par exemple si varA =1 bien sûr

    Je voudrais faire la même chose sous python : choisir la case selon la variable mais je ne veut pas les instancier car le tableau ira peut-être de A1 jusqu'a A99 par exemple, je ne me voit pas toutes les instancier, c'est pourquoi je voudrais utiliser une variable déja pour les lignes A (A1, A2, A3....A99).

    La variable me semblait une bonne idée

    Non, je ne te demande pas d'écrire 99 lignes
    Tu peux faire une boucle, créer des instances de Cases à chaque tour et les stocker dans une liste. Ensuite, il ne te reste plus qu'à manipuler cette liste :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    casesList = list()
    for i in range(1,100):
        nom = "A{0}".format(i)
        casesList.append(Cases(nom))
     
     
    for case in casesList:
        print(case.nom)
    Le savoir est une arme alors soyons armés

  18. #18
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par Fifan31 Voir le message
    et ensuite les mettre dans ton tableau (sans les guillements ):
    Suis un peu les indications qui te sont données ! Car elle marche très bien regarde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A1 = CasePlaine("A1",1,1)    ### Note qu'on n'écrit pas  "A1" = CasePlaine("A1",1,1)
    A2 = CasePrairie("A2", 1, 1)
    var2=[A1,A2]                 ### Sans les guillemets !!
    print(A1)
    print(var2[0])
    Maintenant si tu veux en faire 99 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var2=[]  ### une liste vide
    for i in range(99) :
         la_ieme_case = Cases( ..... )
         var2.append( la_ieme_case ) ### On ajoute la Case à la liste

  19. #19
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Merci à tous, en effet ça marche bien, je n'arrivais pas a trouver la bonne synthaxe.
    Je clôture et je vous remercie encore pour ces explications

    Bonnes fêtes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur les classes "static"
    Par Asmod_D dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2009, 17h27
  2. Questions sur les classes.
    Par Lartiste007 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/04/2009, 14h46
  3. Questions sur les classes.
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/02/2009, 09h21
  4. Un question sur les classes
    Par willycat dans le forum C++
    Réponses: 10
    Dernier message: 22/08/2008, 17h55
  5. Questions sur les classes en C#
    Par greg2 dans le forum C#
    Réponses: 11
    Dernier message: 05/11/2007, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo