CommencerCommencer gratuitement

Constructeurs alternatifs

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

Par exemple, vous développez un package de séries temporelles et souhaitez définir votre propre classe pour travailler avec des 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 peuvent vous être utiles :

  • La méthode .split("-") découpe une chaîne sur "-" en un tableau, par exemple "2020-04-30".split("-") renvoie ["2020", "04", "30"],
  • int() convertit une chaîne en nombre, par exemple int("2019") vaut 2019.

Cet exercice fait partie du cours

Programmation orientée objet en Python

Afficher le cours

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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