Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème : 'livre' object has no attribute 'titre'

un problème de création de type de donnée

    21 novembre 2021 à 17:22:43

    bonjour

    je travail sur un programme de bibliothèque, qui permet d'ajouter des livres, de les recherchers (pas encore implémenter), ou de les supprimer.

    pour me simplifier la tâche, j'ai donc décidé d'utiliser un type personnalisé.

    petit souci cependant dés que j'exécute le code, un erreur de type: 'livre' object has no attribute 'titre' se produit.

    c'est pourquoi je me tourne vers vous en remerciant d'avance toute réponse utile.

    cordialement

    voici le code

    class livre:
    	titre:str
    	auteur:str
    	annee:int
    	nombrePage:int
    
    
    
    
    
    
    def AjouterLivre(oeuvre:list[livre()], numero:int):
    	if oeuvre[numero].titre == "" and oeuvre[numero].auteur == "":
    		oeuvre[numero].titre = input("entrer le titre de l'oeuvre ")
    		oeuvre[numero].auteur = input("entre le nom de l'auteur ")
    		oeuvre[numero].annee = int(input("entrer l'année de parution "))
    		oeuvre[numero].nombrePage = int(input("entre son nombre de page "))
    
    
    
    def MenuBibliotheque():
    	choix:int
    	oeuvre:list[livre]
    	numero:int
    	numero = 0
    
    	oeuvre = [livre()]
    
    	print(" 1 – afficher l’ensemble des livres de la bibliothèque")
    	print("2 – ajouter un nouveau livre")
    	print("3 – supprimer un livre")
    	print("4 – rechercher un livre (par le titre)")
    	print("5 – quitter")
    	while True:
    		choix = int(input("-> "))
    		if choix == 1:
    			AjouterLivre(oeuvre,numero)
    			numero = numero + 1
    		if choix == 2:
    			pass
    		if choix == 5:
    			break
    
    
    MenuBibliotheque()



    • Partager sur Facebook
    • Partager sur Twitter

    méfiez vous des cochon d'indes couineurs

      21 novembre 2021 à 17:37:04

      tu n'as pas initialisé l'objet livre. Déjà au lieux d'utiliser une classe vide qu'avec des attributs sans initialisation, utilise collection.namedtuple ou typing.NamedTuple. example:

      from collections import namedtuple
      
      Livre = namedtuple("Livre", ["titre", "auteur", "annee", "nombrePage"])
      
      # example d'utilisation:
      livre1 = Livre(titre="Mon Livre", auteur="Moi", annee=2021, nombrePage=100)
      print(livre1.titre)      # Mon Livre
      print(livre1.auteur)     # Moi
      print(livre1.annee)      # 2021
      print(livre1.nombrePage) # 100 
      
      #ou 
      
      from typing import NamedTuple
      
      class Livre(NamedTuple):
          titre: str
          auteur: str
          annee: int
          nombrePage: int
      
      # example d'utilisation
      mon_livre = Livre(titre="Hello world", auteur="le hello world team", annee=2021, nombrePage=10)
      print(mon_livre.titre)      # Hello world
      print(mon_livre.auteur)     # le hello world team
      print(mon_livre.annee)      # 2021
      print(mon_livre.nombrePage) # 10



      cela te facilitera ta vie.

      Convention de nommage: les classes commences toujours par une Majuscule 

      au lieu de gaspiller une ligne dans la fonction MenuBibliotheque à la ligne 23 fais ceci:

      oeuvre: list[livre] = [livre()]

      même chose pour la ligne 24 et 25

      -
      Edité par Le programmeur solitaire 21 novembre 2021 à 17:43:48

      • Partager sur Facebook
      • Partager sur Twitter

      le code FAIT le bonheur (pour moi en tous cas)

        22 novembre 2021 à 2:57:33

        Ce sont des attributs de classe, pas des attributs d'objets?
        J'aurais fait:
        class Livre:
            __init__(self, titre="", auteur="", ...):
                self.titre = titre
                self.auteur = auteur
                # ...
        Pour créer un objet:
        monlivre = Livre(titre="Langage Python", auteur="OpenClassrooms", ...)
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          22 novembre 2021 à 13:08:42

          Bonjour,

          Oui, moi, j'aurais fait comme PierrotLeFou tout simplement:

          class Livre:
          
              def __init__(self, titre="", auteur=""):
                  self.titre = titre
                  self.auteur = auteur
          
              def __repr__(self):
                  return "Titre : {}, auteur : {}".format(self.titre,self.auteur)
          
          un_livre = Livre('Programmer en Python', 'Arthur')
          print(un_livre)



          • Partager sur Facebook
          • Partager sur Twitter

          problème : 'livre' object has no attribute 'titre'

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown