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 exempleint("2019")vaut2019.
Cet exercice fait partie du cours
Programmation orientée objet en Python
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)