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

[HELP Python] Classes

Lekiller59
Lekiller59
Niveau 10
19 novembre 2016 à 14:29:15

Bonjour,
pourquoi ce programme ne marche pas svp ? je comprends pas :(

class compte:
    """valeur du solde"""
    
monCompte = compte()
monCompte.solde = 1000

def créditer (self, x):
        self.solde += x
def AfficherCompte (self):
        print("Je possède",self.solde, "argent sur mon compte")

monCompte.créditer = 500
monCompte.AfficherCompte()

Ca me met : AttributeError: 'compte' object has no attribute 'AfficherCompte'

Candystand
Candystand
Niveau 10
19 novembre 2016 à 14:38:47

tes fonctions créditer et AfficherCompte ne sont pas dans ta classe

par ailleurs, mettre un nom de fonction avec un accent est une mauvaise chose

Lekiller59
Lekiller59
Niveau 10
19 novembre 2016 à 14:46:22

Le 19 novembre 2016 à 14:38:47 Candystand a écrit :
tes fonctions créditer et AfficherCompte ne sont pas dans ta classe

par ailleurs, mettre un nom de fonction avec un accent est une mauvaise chose

comment je fais pour les mettres dans ma classe ?

MrGreez94
MrGreez94
Niveau 10
19 novembre 2016 à 15:13:42

Alors [[sticker:p/1kkn]]

Déjà niveau nomenclature il y a quelques trucs que tu peux améliorer
- Les noms de classes commencent par une majuscule (ici "Compte")
- Les noms des méthodes commencent par une minuscule, il y a des majuscules uniquement à chaque nouveau mot ("ceciEstUnNomDeMethode", ici ce serait "afficherCompte" )
- Pas d'accents sinon ça fout le bordel

Ensuite niveau code tes méthodes ne sont pas dans ta classe. En Python il n'y a pas d'acccolades pour délimiter le domaine ou l'appartenance d'une variable/méthode, tout se fait avec des tabulations.

class MaClasse:

    # Je suis dans la classe

# Je ne suis plus dans la classe

Tu essaies là de faire de la programmation orientée objet, je te conseille de suivre un cours sur le sujet, tu as l'air un peu de t'embrouiller.

Ta classe ici permet de définir ce qu'est un compte et ses attributs (ici il n'y a que le solde), il faut dans un premier temps définir un constructeur, qui va être appelé quand tu voudras créer un objet de type "Compte" et qui va fixer les attributs initiaux de ton objet. On fixe ici le montant à 1000.

class Compte:
    
    # Constructeur
    def __init__(self):
    	self.solde = 1000

# On test maintenant si ça marche
monCompte = Compte()  # On crée un compte on faisant appel au constructeur
print(monCompte.solde)

"1000"

Tu peux aussi faire en sorte de fixer le solde par défaut lors de la création de l'objet plutôt que dans la classe, si tu es amené à créer des comptes avec un montant de départ différent

class Compte:
    
    # Constructeur
    def __init__(self, solde):
    	self.solde = solde

monCompte = Compte(1000) # On crée un compte on faisant appel au constructeur
print(monCompte.solde)

"1000"

Tu peux ensuite rajouter les méthodes que tu souhaites pour afficher les informations de ton compte.

class Compte:
    
    # Constructeur
    def __init__(self, solde):
    	self.solde = solde

    def infos(self):
    	print("Je possède",self.solde, "argent sur mon compte")

monCompte = Compte(1000) # On fait appel au constructeur
monCompte.infos()

"Je possède 1000 argent sur mon compte"

Enfin, en Python, les attributs d'un objet sont par défaut publiques, ce qui n'est pas le cas en général. Il est préférable de ne pas y accéder directement mais bon, je ne pense pas qu'on te demande quelque chose d'aussi rigoureux. Donc si tu veux créditer ton compte, tu peux simplement faire:

class Compte:
    
    # Constructeur
    def __init__(self, solde):
    	self.solde = solde

    def infos(self):
    	print("Je possède",self.solde, "argent sur mon compte")


monCompte = Compte(1000) # On fait appel au constructeur
monCompte.infos()
monCompte.solde += 500
monCompte.infos()

"Je possède 1000 argent sur mon compte"
"Je possède 1500 argent sur mon compte"

Ou alors plus rigoureusement comme tu as fait avec ta méthode crediter() (à laquelle tu auras ôté l'accent :-))) ), mais en l'appelant ainsi:

monCompte.crediter(500)
Message édité le 19 novembre 2016 à 15:15:38 par MrGreez94
Lekiller59
Lekiller59
Niveau 10
19 novembre 2016 à 18:07:26

Oh merci VDD, t'es un amour, je lis ton message de suite :hap:

Je m'étais absenté désolé :hap:

Lekiller59
Lekiller59
Niveau 10
19 novembre 2016 à 18:37:37

Merci pour tes explications très claires, j'ai réussi à faire fonctionner mon programme.

en fait c'est parce que je n'avais pas fait appel au constructeur dès le départ, je ne savais pas qu'il était indispensable de le mettre.

Et sinon pour les attributs oui je sais qu'il y en a des privées, des publiques et des protégés en fonction du niveau de sécurité que l'on souhaite.

Mais la le but c'était vraiment un programme pour moi afin de bien comprendre les bases :hap:

Encore merci.

MrGreez94
MrGreez94
Niveau 10
19 novembre 2016 à 18:55:58

Le 19 novembre 2016 à 18:37:37 Lekiller59 a écrit :
Merci pour tes explications très claires, j'ai réussi à faire fonctionner mon programme.

en fait c'est parce que je n'avais pas fait appel au constructeur dès le départ, je ne savais pas qu'il était indispensable de le mettre.

Et sinon pour les attributs oui je sais qu'il y en a des privées, des publiques et des protégés en fonction du niveau de sécurité que l'on souhaite.

Mais la le but c'était vraiment un programme pour moi afin de bien comprendre les bases :hap:

Encore merci.

J'ai fais ça en une traite donc tant mieux si tu as trouvé ça clair.

N'hésite pas si d'autres points te paraissent flous :ok:

Grimmys
Grimmys
Niveau 19
19 novembre 2016 à 21:42:22

Juste, une petite remarque par rapport à ce qui a été dit :

__init__() n'est pas le constructeur de l'objet, mais " l'initialisateur ".

C'est important de connaitre la nuance en Python...

__new__() est le véritable constructeur, appelé automatiquement par Python avant __init__(), il a pour rôle de créer une instance de la classe, et il n'est généralement pas nécessaire de le redéfinir ( contrairement à __init__() qui est indispensable pour définir les attributs de ton objet ).

MrGreez94
MrGreez94
Niveau 10
20 novembre 2016 à 13:16:16

Le 19 novembre 2016 à 21:42:22 Grimmys a écrit :
Juste, une petite remarque par rapport à ce qui a été dit :

__init__() n'est pas le constructeur de l'objet, mais " l'initialisateur ".

C'est important de connaitre la nuance en Python...

__new__() est le véritable constructeur, appelé automatiquement par Python avant __init__(), il a pour rôle de créer une instance de la classe, et il n'est généralement pas nécessaire de le redéfinir ( contrairement à __init__() qui est indispensable pour définir les attributs de ton objet ).

Ah bah j'aurai aussi appris quelque chose tiens, merci pour cette précision https://image.noelshack.com/fichiers/2016/38/1474490323-risitas596.png

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment