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")je2019.
Toto cvičení je součástí kurzu
Object-Oriented Programming in Python
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)