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 :

Initialisation d'objet à partir d'une liste


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Initialisation d'objet à partir d'une liste
    Bonjour à tous,

    Je tiens à préciser pour commencer que je suis complètement débutant en python ahahah mais voilà j'ai un projet à réaliser pour mon cours de programmation et je suis un peu embêtée.

    Ma question est la suivante: je dois déclarer une classe dont le constructeur est le suivant

    class Cours:
    def __init__(self, nom, credit):
    self.nom = nom
    self.credit = credit = int


    Ensuite je crée une liste de cours, ex: liste_cours = ["droit aerien", "droit de la consommation", etc.]

    Il faudrait que je puisse reprendre chaque élément de cette liste pour dire que ce sont des objets de ma classe cours. A la base, comme je suis débute je me suis dit que je n'avais qu'à faire:

    for i in liste_cours:
    i = Cours("i", 6)

    Mais bon voilà j'ai vite compris que ça n'allait pas être aussi simple, seulement voilà je manque de connaissance. Auriez-vous des propositions?

    J'utilise Python 2.7.9

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Pour poster du code, il faut le mettre entre des balises [CODE].

    Tout d'abord si tu utilises Python 2.x, tu dois faire hériter tes classes de object

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Cours(object):
        def __init__(self, nom, credit):
            self.nom = nom
            self.credit = credit
    Le = int n'a certainement rien à faire là.

    Pour créer tes objets, tu t'y prend correctement seulement tu n'en garde aucune trace donc on n'en voit pas trop l'intérêt. Mets-les, par exemple dans une liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cours = []
    for i in liste_cours:
        cours.append(Cours(i, 6))
    Attention pas de guillemets à i sinon les noms des cours seront tous la lettre i.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Pour poster du code, il faut le mettre entre des balises [CODE].

    Tout d'abord si tu utilises Python 2.x, tu dois faire hériter tes classes de object

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Cours(object):
        def __init__(self, nom, credit):
            self.nom = nom
            self.credit = credit
    Le = int n'a certainement rien à faire là.

    Pour créer tes objets, tu t'y prend correctement seulement tu n'en garde aucune trace donc on n'en voit pas trop l'intérêt. Mets-les, par exemple dans une liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cours = []
    for i in liste_cours:
        cours.append(Cours(i, 6))
    Attention pas de guillemets à i sinon les noms des cours seront tous la lettre i.
    Wahou merci beaucoup!! D'accord je comprends alors pourquoi cela ne marchait. C'est pas évident quand on n'a pas l'habitude on oublie vite les choses bêtes ahah.
    D'accord du coup le fait que la liste_cours les éléments sont des chaînes de caractère entre guillemet, ne posera pas de problème? J'avais pensé que peut-être il fallait que j'utilise .strip('"') mais je pense que ce n'est pas le bon moyen...

    oups ok il ne faut pas que je mention le int pour le self.credit, mais du coup comment est-ce que je peux déclarer son type?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Python est un langage à typage dynamique, cela signifie que le type est évalué lors de la création de l'objet.

    Ce que tu avais fait ne permettait d'ailleurs pas de déclarer le type mais créait un alias pour le type int.

    Voyon ça:
    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
    19
    20
     
    >>> a = 5
    >>> a, type(a)
    (5, <class 'int'>)
    >>> b = a
    >>> b, type(b)
    (5, <class 'int'>)
    >>> a = c = int
    >>> a
    <class 'int'>
    >>> b
    5
    >>> c
    <class 'int'>
    >>> b + 2 
    7
    >>> a + 2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'type' and 'int'
    Donc, ici, a ne réfère plus à 5 mais au type int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> isinstance(17, a)
    True
    simple quoi.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Python est un langage à typage dynamique, cela signifie que le type est évalué lors de la création de l'objet.

    Ce que tu avais fait ne permettait d'ailleurs pas de déclarer le type mais créait un alias pour le type int.

    Voyon ça:
    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
    19
    20
     
    >>> a = 5
    >>> a, type(a)
    (5, <class 'int'>)
    >>> b = a
    >>> b, type(b)
    (5, <class 'int'>)
    >>> a = c = int
    >>> a
    <class 'int'>
    >>> b
    5
    >>> c
    <class 'int'>
    >>> b + 2 
    7
    >>> a + 2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for +: 'type' and 'int'
    Donc, ici, a ne réfère plus à 5 mais au type int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> isinstance(17, a)
    True
    simple quoi.
    Quelle merveille ce python ahah, il fait tout Merci beaucoup pour ton aide c'est super cool de m'aider !

    Et sinon pour mon autre question, comme dans ma liste il y a des guillemets quand je vais faire ma boucle pour déclarer mes objets, je n'ai pas besoin de les enlever ?

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu ne sais pas enlever les guillemets, ils sont virtuels.

    Tu les vois parce que Python les utilise pour te montrer qu'il s'agit d'une chaîne de texte, mais ils n'existent pas en réalité.

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ah ok, j'ai compris! Ca semble tellement simple quand on l'explique comme ça, tu peux remplacer mon prof quand tu veux :p en tout cas vraiment merci beaucoup ^^ Ca m'a sorti d'une impasse et je vais pouvoir commencer mon projet demain du coup

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Pour poster du code, il faut le mettre entre des balises [CODE].

    Tout d'abord si tu utilises Python 2.x, tu dois faire hériter tes classes de object

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Cours(object):
        def __init__(self, nom, credit):
            self.nom = nom
            self.credit = credit
    Le = int n'a certainement rien à faire là.

    Pour créer tes objets, tu t'y prend correctement seulement tu n'en garde aucune trace donc on n'en voit pas trop l'intérêt. Mets-les, par exemple dans une liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cours = []
    for i in liste_cours:
        cours.append(Cours(i, 6))
    Attention pas de guillemets à i sinon les noms des cours seront tous la lettre i.
    Désolé de te déranger encore, mais j'ai encore quelques difficultés On est d'accord que grâce au code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cours = []
    for i in liste_cours:
        cours.append(Cours(i, 6))
    J'ai pris chaque élément de la liste de départ, je les ai déclaré objet de la classe cours et ensuite je les ai mis dans la liste "cours = []". Ma question est comment je fais pour récupérer les objets de cette liste en les appelant par leur nom, ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    liste = ["Droit_reel", "Droit_de_la_consommation"]
    cours = []
    for i in liste_cours:
        cours.append(Cours(i, 6))
     
    Droit_reel.méthode()
    Donc pouvoir manipuler les objets par leur nom de cours?

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for c in cours:
        print(c.nom)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for c in cours:
        print(c.nom)
    Merci pour ta réponse ^^ En fait, j'entendais manipuler les objets directement par leur nom de cours.

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Utilise un dictionnaire à la place d'une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cours = {}
    for i in liste_cours:
        cours[i] = Cours(i, 6)
     
    # Test
    print(cours["Droit_reel"], cours["Droit_reel"].nom)
    print(cours["Droit_de_la_consommation"].credit)
    etc ...

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Utilise un dictionnaire à la place d'une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cours = {}
    for i in liste_cours:
        cours[i] = Cours(i, 6)
     
    # Test
    print(cours["Droit_reel"], cours["Droit_reel"].nom)
    print(cours["Droit_de_la_consommation"].credit)
    etc ...
    Yes super! Ca fonctionne du feu de Dieu maintenant Vraiment merci pour l'aide! Je ne m'en serais jamais sortie toute seule (bon le projet est de loin pas terminé lol mais c'est déjà bien )

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/01/2013, 14h51
  2. selection random à partir d'une liste d'objet
    Par emna hakem dans le forum C#
    Réponses: 4
    Dernier message: 29/04/2011, 20h09
  3. Dessiner mes lignes à partir d'une liste d'objets
    Par Cpt Anderson dans le forum Débuter
    Réponses: 3
    Dernier message: 14/11/2009, 10h51
  4. Initialisation d'un objet à partir d'une session
    Par Tony_ducrocq dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2009, 14h50
  5. Réponses: 1
    Dernier message: 29/04/2008, 13h05

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