Objektorientierung in Python - OOP Masterclass - From Newbie to Expert | OOP Komplettkurs

preview_player
Показать описание
In diesem Kurs lernst du ALLES, was du in Python zur Objektorientierten Programmierung lernen kannst. Von Basics wie Klassen, Instanzen und Methods bis hin zu komplexen Themen wie Metaprogramming, ABC´s oder Deskriptors.

Timestamps:
0:00 Überblick
3:22 Basics: Klasse und Instanzen
23:15 Magic methods / dunder methods
51:09 Single Inhertitance
1:02:52 Dataclasses & Enums
1:18:10 Multiple Inheritance & Mixin Classes
1:30:03 Property incl. Getters & Setters
1:45:30 Deskriptors
2:07:34 Slots
2:16:34 Abstract Base Classes (ABCs)
2:23:50 Metaprogramming (Metaclasses)
Рекомендации по теме
Комментарии
Автор

⭐⭐⭐⭐⭐
Entlich mal eine Komplette Erklärung die auf das Grundverständnis eingeht.

Voll toll👍
Danke!

svenwindpassinger
Автор

Vielen, vielen Dank. Das tat gut. Sehr interessant. Ich habe wieder Lust auf Python. Ich konnte die Tuts nicht mehr ertragen, die mir eine halbe Stunde lang erklären was Variablen sind und dass man mit ihnen rechen kann, um dies dann später noch mal zu erklären. Dieses Video war für mich ein Befreiungsschlag. Es gibt sie noch, die sich wirklich auskennen. :-)

littlenosydragon
Автор

Bin gerade bei der Hälfte und feier das Video extrem. Hat mich gut abegholt nach der anfänglichen Tutorialphase.

Qahnung
Автор

Mega Video!
Vielen Dank für deinen Aufwand

jackedpotatoe
Автор

Klasse Struktur und super komplett Kurs👍

easypy
Автор

Richtig gut investierte zweieinhalb Stunden. Perfekte Geschwindigkeit und Tiefe. So muss ein Tutorial sein!

selli
Автор

Super. Vielen lieben Dank dein geiles Video.

bensl
Автор

Erst mal vielen Dank für das umfangreiche Video, welches ich die letzten Tage auch vollständig durchgegangen bin. Da hast du ja tatsächlich das wichtigste aus dem Bereich OOP abgehandelt. Ich denke mal, dass ich das meiste verstanden habe, auch wenn ich einiges noch einmal vertiefen muss. Nur beim Thema Mixins + Multiple Inheritance musste ich noch ein paar externe Quellen zu Rate ziehen. Ich könnte mir vorstellen, dass es nicht nur mir so ging. Vielleicht kannst du da mal noch ein Video zum Unterschied und dem speziellen Einsatzzweck machen und das Thema vertiefen.

yt
Автор

Tolles Video. Hätte aber eine Frage in Bezug auf Deskriptors: Warum erstellen wir nicht die get und set Methoden nicht innerhalb der Archer Class? Ist das jetzt für das Video zur Veranschaulichung so oder wird es grundsätzlich so gemacht?

FillyRoid
Автор

ich habe mal versucht ein problem mit OOP zu lösen. jetzt habe ich eine "ProblemFabrik". :-)

boohoo
Автор

Ich bin begeistert, wie locker du programmierst und nebenbei noch reden kannst. Momentan habe ich noch ein Problem damit die Dinge akustisch zu verstehen. Das ist so wahnsinnig schnell. Ist das wirklich die Originalgeschwindigkeit?

meinnameist
Автор

Bin gerade beim Anfang deines Tutorials und habe beim Teil (Basics: Klasse und Instanzen Minute 14:24) alles so gemacht wie du es gezeigt hast, allerdings komme ich bei der Aufgabe nicht weiter da der folgende Fehler auftritt TypeError: Archer() takes no arguments. Ich habe meinen Code unten reinkopiert. Ich danke wenn du kurz reinschaust und mir weiterhilfst natürlich nur wenn du Zeit hast.



class Archer:

def __int__(self, hp, mana, arrows):
self.hp = hp
self.mana = mana
self._arrows = arrows

def walk(self):
print(f"Ich bin {self} und laufe")

def shoot(self):
if self._arrows > 0:
self._arrows -= 1
print(f"Bogenschütze hat geschossen, noch {self._arrows} Pfeile übrig")
else:
print("Bogenschütze hat keinen Pfeil mehr")


archer1 = Archer(100, 0, 3)
archer2 = Archer(90, 10, 3)
print(archer1.hp)

archer2.arrows = 0
archer2.shoot()

print(archer2.__dict__)

prdbtjb
Автор

Super kompaktes Tutorial zum Thema, herzlichen Dank!
Beim Descriptor-Beispiel bin ich nicht ganz hinterher gekommen, da es m.M.n. eine einfachere Lösung gibt. Der relevante Punkt fehlt evtl. noch weiter vorn in expliziter Nennung: Properties, die direkt in der Klasse deklariert werden, sind für alle Instanzen gleich. Daraus resultiert, dass archer2 die Properties von archer1 ändert. Wenn die Deklaration der Properties aber in __init__ passiert, werden für jede Instanz unterschiedliche Objekte/Properties erzeugt. Musste das mal an anderer Stelle (sehr mühsam) herausfinden. Sich das __init__ und das lästige self. sparen zu wollen kann schwere Nebenwirkungen auslösen ;)
Leider tritt das Problem anscheinend auch bei einer dataclass auf, sofern eine Property als Objekt (z.B. wieder Descriptor) mit default deklariert wird.

GuenterGrau-sm
Автор

Krass. Du hast einfach alles bis aufs kleinste detail erklärt

SchwopSchip-jhhl
Автор

archer = Archer bei 20:24 ist doch trotzdem eine Klasse und keine Instanz, sonst müsste es doch archer = Archer() heißen oder ?

bensl
Автор

Könnte man das Problem mit dem Memory beim Deskriptor nicht auch mit der __del__ lösen?

manybarrylow
Автор

Ne frage noch zum Vererben: Kann man private attribute und methods vererben irgendwie?

yeahnick
Автор

Eine Frage zu den Dekorators für Setter und Getter: Warum ist das so unterschiedlich gemacht? Wäre es nicht verständlicher wenn es @property_get, @property_set und @property_del genannt worden wäre? Was ist der Grund für diese unterschiedliche Namenskonvention?

KlausWinckler
Автор

Bin die erste 30 min des Video gut durchgekommen (Programmieren nachvolzogen), dann allerdings wachsen die Schwierigkeiten ... Meines Erachtens sollte der Code immer auf die Teile beschränkt werden die für die Erklärung notwendig sind. Vor allem Sinn und Zweck sind mir dann ab der Hashfunktion manchmal nicht mehr klar

FranzFakler
Автор

Hallo, danke dir für die sehr ausführliche Darstellung.

Ich habe eine Frage zu deinem Beispiel der MixinClass.

1:30:04 Zeile 9. Wenn ich die SuperWalkMixin Klasse erstelle, gibt mir mein Editor (VS Code, mit Pylance) einen Fehler für die .walk() Methode von {super().walk()} aus. Fehlermeldung: "Cannot access member "walk" for type "object"⏎ Member "walk" is unknown". Meine laienhafte Vermutung wäre jetzt, das die SuperWalkMixin Klasse ja noch nicht weiß, welche ihre Superklasse sein soll und deswegen rummeckert.
Ausgeführt wird der Code dennoch ohne Probleme, sowohl im Jupyter Notebook, als auch in einer normalen .py Datei.

Gebe ich der SuperWalkMixin Klasse die Archerklasse als Superklasse mit (class SuperWalkMixin(Archer):" dann verschwindet die Fehlermeldung und es funktioniert ebenfalls.
Mein Gedanke ist, das dies aber eigentlich nicht die Lösung sein kann, da ich die SuperWalkMixin Klasse ja eventuell auch für eine andere Klasse, zB Wizard verwenden möchte. Und dann ist es ja Essig, da ich bereits die Archer Klasse da hab.
Ich hoffe ich konnte das einigermaßen verständlich beschreiben.


Grüße und mach weiter so.

smoochy