Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| talit:oop_einfuehrung [2022-06-05 12:49] – [Auftrag 1] sca | talit:oop_einfuehrung [2023-05-03 08:33] (aktuell) – [Auftrag 2: OOP im Game] sca | ||
|---|---|---|---|
| Zeile 3: | Zeile 3: | ||
| ===== - Klassen und Objekte ===== | ===== - Klassen und Objekte ===== | ||
| - | Studiere die Slides für eine detaillierte Einführung in die **objektorientierte Programmierung (OOP)**. Hier im Wiki sind einfach die allerwichtigsten Grundlagen angegeben. | + | Studiere die {{ : |
| In der objektorientierten Programmierung schreibt man **Klassen**, | In der objektorientierten Programmierung schreibt man **Klassen**, | ||
| Zeile 66: | Zeile 66: | ||
| {{ : | {{ : | ||
| - | ==== Auftrag 1 ==== | + | ==== Auftrag 1: Klasse Person |
| - | 1. Implementiere selbst die Klasse Person. Kein Copy-Paste, so viel wie geht aus Erinnerung anstelle Abschreiben | + | 1. Implementiere selbst die **Klasse Person**. Kein Copy-Paste, so viel wie geht aus Erinnerung anstelle Abschreiben |
| - | | + | |
| - | 1. Füge weitere Attribute hinzu: Telefonnummer & Mail-Adresse | + | 1. Füge weitere |
| 1. Erweitere `get_info()`: | 1. Erweitere `get_info()`: | ||
| 1. für LP: "Name: Bert Schreiner, Adresse: … , … , … , Typ: LP, Position: HL" | 1. für LP: "Name: Bert Schreiner, Adresse: … , … , … , Typ: LP, Position: HL" | ||
| Zeile 76: | Zeile 76: | ||
| 1. Zeige auch neue Attribute darin an. | 1. Zeige auch neue Attribute darin an. | ||
| 1. Implementiere Klassenmethode `increase_klasse()`. Gebe Fehlermeldung aus, falls für Lehrperson aufgerufen wird. | 1. Implementiere Klassenmethode `increase_klasse()`. Gebe Fehlermeldung aus, falls für Lehrperson aufgerufen wird. | ||
| - | 1. Implementiere Klassenmethode `get_age()`. Tipp: Verwende datetime-Modul | + | 1. Implementiere Klassenmethode `get_age()`. Tipp: Verwende datetime- |
| - | {{:talit:pasted:20220605-144229.png}} | + | <nodisp 2> |
| + | ++++Lösung| | ||
| + | <code python> | ||
| + | from datetime import datetime | ||
| + | from dateutil import relativedelta | ||
| + | |||
| + | class Person: | ||
| + | def __init__(self, | ||
| + | self.name = _name | ||
| + | self.address = _address | ||
| + | self.birthday = _birthday | ||
| + | self.phone = _phone | ||
| + | self.mail = _mail | ||
| + | self.type = _type | ||
| + | self.position = _position | ||
| + | self.klasse = _klasse # can't use ' | ||
| + | |||
| + | def get_info(self): | ||
| + | str_all = f" | ||
| + | if self.type == " | ||
| + | return | ||
| + | else: | ||
| + | return str_all + f" | ||
| + | |||
| + | def get_age(self): | ||
| + | birthdate = datetime.strptime(self.birthday," | ||
| + | now = datetime.now() | ||
| + | diff = relativedelta.relativedelta(now, | ||
| + | return diff.years | ||
| + | |||
| + | def change_klasse(self, | ||
| + | yr = int(self.klasse[0]) + x | ||
| + | self.klasse = str(yr) + self.klasse[1:: | ||
| + | |||
| + | # instantiate objects, store in list | ||
| + | persons = [ | ||
| + | Person(" | ||
| + | Person(" | ||
| + | Person(" | ||
| + | Person(" | ||
| + | ] | ||
| + | |||
| + | sca = Person(" | ||
| + | print(sca.get_age()) | ||
| + | |||
| + | verkelle = Person(" | ||
| + | heimeier = Person(" | ||
| + | verkelle.change_klasse() # Verena | ||
| + | heimeier.change_klasse(-1) # Heiri has to repeat a year | ||
| + | print(verkelle.klasse) | ||
| + | print(heimeier.klasse) | ||
| + | </ | ||
| + | ++++ | ||
| + | </ | ||
| + | |||
| + | ==== Auftrag 2: OOP im Game ==== | ||
| + | |||
| + | 1. Überlege dir mit einer Kolleg:in und mache Notizen: | ||
| + | 1. Wie könnte man OOP im Game von früher sinnvoll einsetzen? | ||
| + | 1. Welche Klasse(n) & Objekte braucht es? | ||
| + | 1. Welche Attribute und Methoden haben diese? | ||
| + | 1. Bespreche mit der Lehrperson | ||
| + | 1. Setze dies dann in der nächsten Aufgabe um. | ||