Constructori alternativi
Python îți permite să definești și metode de clasă, folosind decoratorul @classmethod și un prim argument special, cls. Principala utilizare a metodelor de clasă este definirea unor metode care returnează o instanță a clasei, fără a folosi același cod ca __init__().
De exemplu, să presupunem că dezvolți un pachet pentru serii de timp și vrei să definești propria clasă pentru lucrul cu date calendaristice, BetterDate. Atributele clasei vor fi year, month și day. Vrei să ai un constructor care creează obiecte BetterDate pe baza valorilor pentru an, lună și zi, dar vrei și să poți crea obiecte BetterDate din șiruri de caractere de tipul 2020-04-30.
Poate fi utile următoarele funcții:
- Metoda
.split("-")împarte un șir de caractere la"-"într-un array, de exemplu"2020-04-30".split("-")returnează["2020", "04", "30"], int()convertește un șir de caractere într-un număr, de exempluint("2019")este2019.
Acest exercițiu face parte din cursul
Programare orientată pe obiecte în Python
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)