Eine Klasse für sich

Aufgabe

In dieser Aufgabe sollen Sie etwas fortgeschrittenere Klassen erstellen.

1.

Implementieren Sie einen neuen Datentypen Geburtstag als Klasse. Dieser neue Datentyp soll als Parameter den Tag, Monat und das Jahr des Geburtstags erwarten. Verwenden Sie Duck-Typing, um den Geburtstag im Format TT. MONATSNAME JJJJ auszugeben.

z. B.: es wird 15. Januar 2022 ausgegeben, wenn man print() auf eine Instanz der Klasse aufruft

2.

Implementieren Sie eine Funktion when_birthday als Teil des Datentyps. Diese soll die Anzahl an Tagen bis zum nächsten Geburtstag zurückgeben. Schaltjahre können ignoriert werden. Um das aktuelle Datum zu kriegen, können Sie die Klassenfunktion1 today aus dem datetime Modul nutzen, dazu einfach diesen Code nutzen:

# Notwendig um das datetime Modul zu nutzen
import datetime

# date ist eine Klasse im datetime Modul, welche ein Datum repräsentieren kann.
# Mit datetime.time.today() rufen wir die today Klassenfunktion der date Klasse auf.
# Diese gibt ein date-Objekt zurück, welches dem momentanen Datum entspricht.
current_date = datetime.date.today()

# date-Objekte speichern den Tag, Monat und Jahr, auf diese kann man dann wie gewohnt zugreifen:
day = current_date.day
month = current_date.month
year = current_date.year

print(current_date)
print(day)
print(month)
print(year)

"""
OUTPUT:
2023-09-19
19
9
2023
"""

Bonus (echt kniffilig!)

Überarbeiten Sie den Datentyp so, dass Schaltjahre aktzeptiert und in der when_birthday Funktion miteinberechnet werden. Sie können davon ausgehen, dass Personen, die an einem Schaltjahr geboren sind, ihren Geburtstag an nicht-Schaltjahren am 28. Feb. feiern. Schauen Sie sich die Aufgabe 200 Punkte/if-Abfrage/Jäger des verlorenen Tages an, falls Sie nicht wissen, wie man bestimmt, ob ein bestimmtes Jahr ein Schaltjahr ist oder nicht.


  1. eine Klassenfunktion ist eine spezielle Art von Funktion, welche über der Klasse selbst aufgerufen werden kann. ↩︎