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 :

Afficher le nom d'une classe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 39
    Par défaut Afficher le nom d'une classe
    Bonjour,

    Ce n'est pas la première fois que j'ai ce problème, et je n'ai pas trouvé de solution dans mes recherches...

    Quand je souhaite récupérer le nom d'une classe, ou d'un objet, je récupère toutes les infos sur l'instance et non juste le nom que j'ai donné à la classe. Je suis sans doute pas clair, avec le code ça ira mieux

    Voici une classe army avec une méthode permettant d'ajouter des troupes (exercice proposé sur checkio):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Army:
     
        def __init__ (self):
            self.army = []
     
     
        def add_units(self, type, add):
            a = [type, add]
            self.army.append(a)
            print(self.army)
    Là comment je l'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    army_3 = Army()
        army_3.add_units(Warrior, 20)
        army_3.add_units(Knight, 5)
    (Warrior et Knight sont des classes)

    Et ce que j'obtiens dans ma liste représentant l'armée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [["<class '__main__.Warrior'>", 20], ["<class '__main__.Knight'>", 5]]
    J'aimerai juste pouvoir récupérer le nom de l'unité (Warrior) et non tout ca : "<class '__main__.Warrior'>"

    Merci à vous!

  2. #2
    Membre Expert

    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
    Par défaut
    Regarder et éxécuter le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A():
      pass
     
    class B():
      def __str__(self):
         return self.__class__.__name__
     
    a=A()
    print(a)
    b=B()
    print(b)
    Ici la surcharge de la méthode __str__ semble donc être ce que vous voulez. Il faut donc mettre cette méthode dans votre classe Unit, (car je présume que Warrior, Knight, dérive toutes 2, d'une même classe Unit. Et si ce n'est pas le cas, il faut le faire).

    Après c'est pas forcément une bonne idée de réduire l'affichage à juste le nom de la classe. Car vous pouvez avoir 2 Warrior différents, mais si vous les afficher, vous ne verrez pas la différence ! Pour voir cette différence vous pouvez par exemple compléter vos unités en leur donnant des noms

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class C():
      def __init__(self, name):
          self.name=name
     
      def __str__(self):
         return self.__class__.__name__+' '+self.name
     
    c=C('Lg53')
    print(c)

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Salut,


    Vous pouvez récupérer le nom de la classe via type(self).__name__.

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

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2019
    Messages : 39
    Par défaut
    Super! je vous remercie pour votre aide

Discussions similaires

  1. Comment obtenir dynamiquement le nom d'une classe ?
    Par cquilgars dans le forum C++
    Réponses: 5
    Dernier message: 27/06/2006, 23h37
  2. Réponses: 2
    Dernier message: 15/06/2006, 14h23
  3. afficher un JDialog depuis une classe JDialog
    Par koolway dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 31/03/2006, 13h47
  4. [Débutant] Créer une instance avec le nom d'une classe
    Par Quetzalcoatl dans le forum Langage
    Réponses: 7
    Dernier message: 23/01/2006, 20h43
  5. Afficher un bouton appartenant à une classe sur une form
    Par Julien_riquelme dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/09/2005, 13h10

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