CommencerCommencer gratuitement

Constructeurs alternatifs

Python vous permet également de définir des méthodes de classe, en utilisant le décorateur @classmethod et un premier argument spécial cls. La principale utilisation des méthodes de classe consiste à définir des méthodes qui renvoient une instance de la classe, mais qui n'utilisent pas le même code que __init__().

Par exemple, vous développez un progiciel de séries temporelles et vous souhaitez définir votre propre classe pour travailler avec des dates, BetterDate. Les attributs de la classe seront year, month, et day. Vous souhaitez disposer d'un constructeur qui crée des objets BetterDate à partir des valeurs de l'année, du mois et du jour, mais vous voulez également pouvoir créer des objets BetterDate à partir de chaînes de caractères telles que 2020-04-30.

Les fonctions suivantes peuvent vous être utiles :

  • .split("-") La méthode de découpage de la chaîne de caractères à l'adresse"-" en un tableau, par exemple "2020-04-30".split("-") renvoie à ["2020", "04", "30"],

  • int() convertira une chaîne de caractères en un nombre, par exemple int("2019") est 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