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

Progra orienté objet en python

410_mort
410_mort
Niveau 10
02 juin 2021 à 18:35:35

Bonjour à tous et toute,
Je débute en progra orienté objet. J'essaye de convertir un code matlab en python. Voici les deux codes :


%Code matlab        
classdef personne
    properties
        A
        B
        C
    end
    methods
        function_1 = boire(contenant,litre,volume) 
        obj.A = contenant
        obj.B = litre
        obj.C =obj.B/1000
        end
    end
end

#Code python
class personne:
    def __init__(self, A, B, C):
        self.A=A
        self.B=B
        self.C=C
        
     def function_1(self, contenant, litre, volume):
         A=contenant
         B=litre
         C=B/1000

J'ai regardé bcp de vidéos en OOP et lu des tutos FR et EN
Résultat j'ai du mal à mettre en pratique quand faut coder tout seul :mort:

Si quelqu'un pouvait m'aider ce serait sympa

CreeAxe94
CreeAxe94
Niveau 27
02 juin 2021 à 19:21:02

Dans la méthode que tu crée en Python tu dis :
A = contenant

Donc là tu demandes à Python de créer une variable locale (qui existe uniquement dans ta fonction) qui s'appelle A.
Mais tu n'utilises pas l'attribut "self.A". Qui est une variable instancié globale (existe partout où un objet "personne" existe).

Ton code MATLAB fait appel à cette variable self.A avec la syntaxe obj.A

Azerban
Azerban
Niveau 16
02 juin 2021 à 19:27:49
class Personne:
    def __init__(self, contenant, litre):
        self.contenant = contenant
        self.litre = litre
        self.volume = self.volume_urine()
        
    def volume_urine(self):
        return self.litre * 0.45
        
    def boire(self):
        print(f"Aujourd'hui, j'ai bu {self.litre} litre(s) avec un(e) {self.contenant}. Mon volume d'urine sera de {self.volume} litre(s) dans la journée.")

titouan = Personne("gourde", 3)
titouan.boire()
410_mort
410_mort
Niveau 10
03 juin 2021 à 18:05:39

salut, déjà j'aimerai vous remercier pour vos réponses, c'est vraiment sympa !

j'ai relu des cours avant de vous répondre. Si je suis Creeaxe94 ça donne :

#Code python
class personne:
    def __init__(self, A, B, C):
        self.A=A
        self.B=B
        self.C=C
        
     def function_1(self, contenant, litre, volume):
         self.A=contenant
         self.B=litre
         self.C=self.B/1000

et si je me goure pas, la function_1 c'est une méthode, et A,B,C sont des attributs de la classe personne ? Une classe possède des attributs, ainsi que des méthodes, et elle peut être instanciée en l'appelant de différentes manières ?

Azerban, merci pour ton post. c'est facile à comprendre quand quelqu'un écrit du beau code ! :noel:

J'ai deux questions qui me trottent en tête :
-Est ce que la ré-écriture du code matlab que je donne sur ce post est bonne, optimisée? Si il y a beaucoup d'attributs A,B,C,D,E,F,G,H et pareil pour la méthode, autant de paramètres, est ce que cette écriture est toujours valable ? Ou il faut mieux par exemple créer une méthode pour chaque attribut?

-Si dans le code matlab que j'ai donné dans le 1st post, il y avait par exemple A=0 dans la class personne (5eme ligne) : comment je traduis cela en python?

#Code python
class personne:
    def __init__(self, A, B, C):
        self.A=A
        A=0
        self.B=B
        self.C=C

merci !

Azerban
Azerban
Niveau 16
03 juin 2021 à 21:51:10

A, B, C ne sont pas des attributs de classe mais des attributs d'instance. Ils sont attachés à l'instance car définis dans la méthode __init__ qui permet d'initialiser les paramètres d'une instance et sont rattachés à l'instance via le mot self :

self.a

Pour créer des attributs de classe, il faut les définir hors de __init__ :

class Personne:

    bipede = True
    mammifere = True
    
    def __init__(self, gender, size):
        self.gender = gender
        self.size = size
toto = Personne("male", 181)

if toto.bipede and toto.mammifere:
    print(f"toto est surement un humain")

print(f"Toto est un(e) '{toto.gender}' et mesure {toto.size}cm.")

Si tu tapes :

dir(toto)

Tu verras tous les attributs et méthodes (en fait une méthode est un attribut qui est un callable) que toto possède. Certains ont été définis au moment de l'instanciation (via la méthode __init__) mais d'autres viennent de la classe Personne (gender et size) et le reste vient des classes parentes (pas de classe parente ici) et de la super classe object.

Si tu tapes :

Personne.__bases__

Tu verras que Personne hérite par défaut d'object et donc de ses attributs et méthodes.
Par exemple si tu tapes :

toto.__str__()

Tu auras un résultat. La méthode (magique) __str__ vient de la classe object.

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