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 exempleint("2019")
est2019
.
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)