ÎncepețiÎncepe gratuit

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 exemplu int("2019") este 2019.

Acest exercițiu face parte din cursul

Programare orientată pe obiecte în Python

Vezi cursul

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)
Editează și rulează codul