Začněte nyníZačněte zdarma

Alternativní konstruktory

Python umožňuje definovat také třídní metody pomocí dekorátoru @classmethod a speciálního prvního argumentu cls. Třídní metody se nejčastěji používají k definování metod, které vrací instanci třídy, ale nepracují se stejným kódem jako __init__().

Představme si, že vyvíjíš balíček pro práci s časovými řadami a chceš vytvořit vlastní třídu pro práci s daty – BetterDate. Atributy třídy budou year, month a day. Chceš mít konstruktor, který vytváří objekty BetterDate na základě zadaných hodnot roku, měsíce a dne, ale zároveň chceš umět vytvářet objekty BetterDate z řetězců jako 2020-04-30.

Můžou se ti hodit následující funkce:

  • Metoda .split("-") rozdělí řetězec na části podle "-", např. "2020-04-30".split("-") vrátí ["2020", "04", "30"],
  • int() převede řetězec na číslo, např. int("2019") je 2019.

Toto cvičení je součástí kurzu

Object-Oriented Programming in Python

Zobrazit kurz

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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)
Upravit a spustit kód