CommencezCommencez gratuitement

Constructeurs alternatifs

Python permet aussi de définir des méthodes de classe à l'aide du décorateur @classmethod et d'un premier argument particulier, cls. L'usage principal des méthodes de classe est de définir des méthodes qui retournent une instance de la classe sans pour autant utiliser le même code que __init__().

Par exemple, vous créez une bibliothèque de séries chronologiques et vous voulez définir votre propre classe pour travailler avec les dates, BetterDate. Les attributs de la classe seront year, month et day. Vous voulez un constructeur qui crée des objets BetterDate à partir des valeurs d'année, de mois et de jour, mais vous voulez aussi pouvoir créer des objets BetterDate à partir de chaînes comme 2020-04-30.

Les fonctions suivantes pourraient vous être utiles :

  • La méthode .split("-") découpe une chaîne au caractère "-" en un tableau, p. ex. "2020-04-30".split("-") retourne ["2020", "04", "30"],
  • int() convertit une chaîne en nombre, p. ex. int("2019") vaut 2019 .

Cette activité fait partie du cours

Programmation orientée objet en Python

Voir le cours

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

class BetterDate:    
    # Constructor
    def __init__(self, year, month, day):
      # Recall that Python allows multiple variable assignments in one line
      self.year, self.month, self.day = year, month, day
    
    # Define a class method from_str
    ____
    def from_str(____, datestr):
        # Split the string at "-" and convert each part to integer
        parts = datestr.split("-")
        year, month, day = int(parts[0]), ____, ____
        # Return the class instance
        ____ ____(____, ____, ____)
        
bd = BetterDate.from_str('2020-04-30')   
print(bd.year)
print(bd.month)
print(bd.day)
Modifier et exécuter le code