CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Erreur "can't set attribute"

Pseudo supprimé
Pseudo supprimé 21 décembre 2019 à 12:02:00

Bonjour, bonsoir à tous

En voulant me former sur Python, j'ai suivi un tutoriel sur les encapsulations.
J'ai suivi le tuto, et pourtant, rien à faire, un message d'erreur revient sans cesse, je ne comprends

Mon code est ci-dessous

https://pastebin.com/pTYPAWTg
https://pastebin.com/QkrD6k33

Merci pour votre aide :hap:

[Black_Spirit]
[Black_Spirit]
Niveau 19
21 décembre 2019 à 13:26:10

Ton tuto a pas l'air correct. Je te conseil de vérifier dans la doc pour ce genre de cas:
https://docs.python.org/3.8/library/functions.html?highlight=property#property

En gros le constructeur de property est class property(fget=None, fset=None, fdel=None, doc=None) et toi tu précises juste le premier argument, c'est à dire le getter.

Plus exactement, tu fais ça:
age = property(_setage)
Du coup le code considère ta méthode _setage comme un getter (et les getters sont en READ ONLY), d'où l'erreur lors d'une tentative d'assignement.

Et du coup, pour avoir ce que tu veux, faudrait faire:

class Humain:
 
    def __init__(self, nom, age):
        print("Creation d'un humain: ")
        self._nom = nom
        self._age = age
 
    def _getnom(self):
        print("Impossible d'indiquer le nom")

    def _getage(self):
        return self._age
 
    def _setage(self, nouvel_age):
        if nouvel_age < 0:
            self._age = 0
        else:
            self._age = nouvel_age
 
    nom = property(_getnom)
    # Le Underscore indique que la fonction n'est valable que dans la classe
    age = property(_getage, _setage)

Ou avec les décorateurs (je préfère cette version perso):

class Humain:

    def __init__(self, nom, age):
        print("Creation d'un humain: ")
        self._nom = nom
        self._age = age

    @property
    def nom(self):
        print("Impossible d'indiquer le nom")

    @property
    def age(self):
        return self._age
 
    @age.setter
    def age(self, nouvel_age):
        if nouvel_age < 0:
            self._age = 0
        else:
            self._age = nouvel_age
Message édité le 21 décembre 2019 à 13:27:34 par [Black_Spirit]
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment