Alternatywne konstruktory
Python pozwala też definiować metody klasowe – służy do tego dekorator @classmethod oraz specjalny pierwszy argument cls. Metody klasowe są najczęściej używane do tworzenia instancji klasy w sposób inny niż standardowy konstruktor __init__().
Przykładowo: tworzysz pakiet do analizy szeregów czasowych i chcesz zdefiniować własną klasę do obsługi dat – BetterDate. Klasa ma mieć atrybuty year, month i day. Chcesz mieć konstruktor tworzący obiekty BetterDate na podstawie podanych wartości roku, miesiąca i dnia, ale też możliwość tworzenia obiektów BetterDate z ciągów znaków takich jak 2020-04-30.
Przydatne funkcje:
- Metoda
.split("-")dzieli ciąg znaków przy"-"i zwraca tablicę, np."2020-04-30".split("-")zwraca["2020", "04", "30"], int()konwertuje ciąg znaków na liczbę, np.int("2019")daje2019.
To ćwiczenie jest częścią kursu
Programowanie obiektowe w Pythonie
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)