Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Avis] Classe "Rectangle"

    6 mars 2013 à 11:48:18

    Bonjour,

    Je suis en train d'apprendre en ce moment les bases du paradigme orienté object. Afin de m'entraîner un tout petit peu avec les concepts élémentaires, j'ai décidé de créer une mini classe "Rectangle", qui représente donc l'objet géométrique à deux dimensions.

    Voici le code Python :

    import math
    
    class Rectangle:
        def __init__(self, length=1, width=1):
            self.length = length
            self.width = width
        
        def area(self):
            return self.length * self.width
        
        def perimeter(self):
            return 2 * (self.length + self.width)
        
        def diagonal(self):
            return math.sqrt(pow(self.length, 2) + pow(self.width, 2))
        
        def is_square(self):
            return self.length == self.width

    Ce serait vraiment gentil si quelqu'un pouvait prendre 30 secondes pour rapidement me dire ce qu'il y a à améliorer avec mon code. Je sais qu'il est très simple, mais j'apprends l'objet depuis même pas 24 heures, c'est un concept totalement nouveau pour moi, donc il s'agit juste de voir si j'ai saisi le principe de base ou alors si j'ai fait n'importe quoi. ^^

    Merci beaucoup !

    -
    Edité par Erald 6 mars 2013 à 11:53:54

    • Partager sur Facebook
    • Partager sur Twitter
      6 mars 2013 à 12:01:42

      pygame possède une class Rectangle plutôt pas mal, qui n'a pas la même utilité qu'ici mais qui peut t'intéresser, notamment à cause des "property", si tu ne les à pas encore abordés.

      http://www.pygame.org/docs/ref/rect.html

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        6 mars 2013 à 12:17:57

        Tu pourrais par exemple te servir de property pour enlever la possibilite de donner aux attributs une valeur negative.

        Ce qui donnerait:

        class Rectangle:
            def __init__(self, length=1, width=1):
                self._length = length
                self._width = width
        		
            @property
            def length(self):
                return self._length
        	
            @length.setter
            def length(self, value):
                if value < 0:
                    raise ValueError
                self._length = value
        		
            @property
            def width(self):
                return self._length
        	
            @width.setter
            def width(self, value):
                if value < 0:
                    raise ValueError
                self._width = value
        		
            def area(self):
                return self._length * self._width
             
            def perimeter(self):
                return 2 * (self._length + self._width)
             
            def diagonal(self):
                return math.sqrt(self._length**2 + self._width**2)
             
            def is_square(self):
                return self._length == self._width
        
        Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
        Type "copyright", "credits" or "license()" for more information.
        >>> ================================ RESTART ================================
        >>> 
        >>> r = Rectangle()
        >>> r.width = -1
        Traceback (most recent call last):
          File "", line 1, in 
            r.width = -1
          File "C:\...\test.py", line 23, in width
            raise ValueError
        ValueError
        >>> 
        

        Bonne journee!

        PS: Pour calculer des puissances, pas besoin d'importer math.pow, la notation ** suffit! (sauf si tu veux calculer le modulo d'une puissance (elevee), ce qui n'est pas ton cas).

        -
        Edité par stackOverflow 6 mars 2013 à 12:39:05

        • Partager sur Facebook
        • Partager sur Twitter
          6 mars 2013 à 12:50:27

          Ah non non mais si j'ai importé math c'est bien pour sqrt, pas pour pow. :) Comme tu peux le voir j'ai écrit pow et pas math.pow.

          Et bonne idée pour les property, je connaissais pas encore.

          • Partager sur Facebook
          • Partager sur Twitter
            6 mars 2013 à 12:54:25

            Oui exact. J'avais pas fait gaffe que tu utilisais sqrt. Mais ca reste quand meme plus clair d'ecrire a**b je trouve.

            -
            Edité par stackOverflow 6 mars 2013 à 12:57:17

            • Partager sur Facebook
            • Partager sur Twitter

            [Avis] Classe "Rectangle"

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown