Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/08/2017, à 12:24

paul18

[résolu] Python et POO: premier essai

Salut,

Je m'essaie à la POO (pure débutant) : un cours dans une main, le clavier dans l'autre; je n'arrive pas à comprendre pourquoi le code 1 me renvoie bien les valeurs, alors que le second me retourne les adresses mémoire : à côté de quoi je suis passé ?

Merci par avance

Paul

Code1:

class Voiture:
  
  def __init__(self):           ## les valeurs sont initialisées par défaut
    self.marque = "no_marque"
    self.couleur = "no_couleur"
    self.reserveessence = 0.

  def demarrer(self):
    if self.reserveessence > 0. :
      print("Je démarre")
    else:
      print("Je ne peux pas démarrer (réserve = 0)")
      
      
  def rouler(self,nbre_Km):
    self.nbre_Km = float(nbre_Km)
    self.reserveessence = (self.reserveessence - 5.*self.nbre_Km/100.)
    

## main
ma_caisse = Voiture()               ## appel de la classe
ma_caisse.reserveessence = 30       ## initialisation reserveessence
ma_caisse.demarrer()                ## demarrage -> la class vérifie si c'est possible (fct demarrer)
ma_caisse.rouler(100)               ## on roule 100 Km -> remise à jour de "reserveessence"
print(ma_caisse.reserveessence)     ## affiche la nouvelle valeur

## on parcours à nouveau 100 Km
ma_caisse.rouler(100)               ## on roule 100 Km -> remise à jour de "reserveessence"
print(ma_caisse.reserveessence)     ## affiche la nouvelle valeur --> garde bien en mémoire l'historique !!!!!!!

## on parcours à nouveau 400 Km
ma_caisse.rouler(400)               ## on roule 400 Km -> remise à jour de "reserveessence"
print(ma_caisse.reserveessence)     ## affiche la nouvelle valeur --> réserve tombe à zéro !!!!

ma_caisse.demarrer()                ## la voiture ne peut plus démarrer :-) 

Code 2:

class Temperature:
  
  ## constructeur ##
  def __init__(self, laValeur = 0):
    self.__valeur = float(laValeur)  ## valeur est ici privée
    
  ## méthodes publiques: accès aux attributs (uniquement)
  ## accesseurs
  def getValeur(self):
    return self.__valeur      ## on accède à la valeur de "__valeur"
                              ## on ne fait que retourner une valeur
                              
#  ## mutateur = setter
#  def setValeur(self,value):  ## "__valeur" était initalement privée, on la rend indirectement public via "setValeur"
#                              ## "value" est passée en argument ... puisque qu'on mute "__valeur" --> via self
#    self.__valeur = value


  ## Méthodes publiques: opérations
  def getValeurC(self):
    return (self.__valeur - 273.16)         ## Calcul de T en °C depuis la valeur en K

  def getValeurF(self):
    return (1.8 * self.getValeurC() + 32)   ## on appelle ici la T en °C -> on pointe sur getValeurC




## main
eauChaude = Temperature(310)    ## Calcul l'objet eauChaude
print(eauChaude.getValeurC)
print(eauChaude.getValeurF)
print(eauChaude.getValeur)      ## vérif sur valeur initiale

Dernière modification par paul18 (Le 18/08/2017, à 13:40)

Hors ligne

#2 Le 18/08/2017, à 12:42

pingouinux

Re : [résolu] Python et POO: premier essai

Bonjour,
Je n'ai pas testé, mais les appels doivent se faire ainsi :

print(eauChaude.getValeurC())
print(eauChaude.getValeurF())
print(eauChaude.getValeur())      ## vérif sur valeur initiale

Hors ligne

#3 Le 18/08/2017, à 13:31

paul18

Re : [résolu] Python et POO: premier essai

oui c'est bien ça; j'ai compris mon erreur: j'appelle une fonction/méthode et non une variable/instance

Merci

Dernière modification par paul18 (Le 18/08/2017, à 13:40)

Hors ligne