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:48] – [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. "Name: Bert Schreiner, Adresse: … , … , … , Typ: LP, Position: HL" | + | |
- | 1. "Name: Verena Keller, Adresse: … , … , … , Typ: STU, Klasse: 1Fd" | + | |
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. | ||