🐍

Python: Fortgeschritten (Decorators, Lambda & Exceptions)

97 cards · 🇺🇸 English → 🇩🇪 Deutsch

Decorators, Lambda-Funktionen, Exception-Handling und weitere fortgeschrittene Python-Konzepte.

Study all 97 cards for free

Flashcards, quizzes, pixel-art games and a daily review that remembers for you.

Study this deck free

Try the first 10 cards

1 / 10
Question

Metaclass in Python

Knew itLearning

Tap the card for the answer · swipe right if you knew it, left if not

Already have an account? Sign in

Cards

  1. 1Metaclass in Python
    Eine Klasse einer Klasse, die festlegt, wie sich eine Klasse verhält. type ist die Standard-Metaklasse. Metaklassen steuern die Klassenerzeugung und können Klassenattribute verändern
  2. 2Create a custom metaclass
    class MyMeta(type): def __new__(cls, name, bases, attrs): # attrs anpassen return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=MyMeta): pass
  3. 3__new__
    __new__ erzeugt die Instanz (gibt sie zurück), __init__ initialisiert sie (gibt None zurück). __new__ wird zuerst aufgerufen und erhält cls; __init__ erhält self
  4. 4Descriptor in Python
    Ein Objekt, das die Methoden __get__, __set__ oder __delete__ definiert. Descriptors steuern den Attributzugriff. Werden intern für properties, Methoden, classmethod und staticmethod verwendet
  5. 5Write a simple descriptor
    class Descriptor: def __get__(self, obj, objtype=None): return value def __set__(self, obj, value): # Wert setzen class MyClass: attr = Descriptor()
  6. 6data vs non-data descriptors
    Daten-Descriptor: definiert __set__ oder __delete__ (höhere Priorität, wird vor dem Instanz-__dict__ geprüft) Nicht-Daten-Descriptor: nur __get__ (niedrigere Priorität, Instanz-__dict__ wird zuerst geprüft)
  7. 7Method Resolution Order (MRO)
    Die Reihenfolge, in der Python in einer Klassenhierarchie nach Methoden/Attributen sucht. Verwendet den C3-Linearisierungsalgorithmus. Anzeige mit ClassName.__mro__ oder ClassName.mro()
  8. 8How does super() work?
    Gibt ein Proxy-Objekt zurück, das Methodenaufrufe an die nächste Klasse in der MRO delegiert. super().__init__() ruft die __init__ der Elternklasse gemäß MRO auf, nicht nur die der direkten Elternklasse
  9. 9__call__
    Macht eine Instanz wie eine Funktion aufrufbar. Wird bei der Syntax obj() aufgerufen: class Adder: def __call__(self, x, y): return x + y a = Adder() a(3, 5) # gibt 8 zurück
  10. 10__getattr__ vs __getattribute__
    __getattr__: wird nur aufgerufen, wenn das Attribut auf normalem Weg NICHT gefunden wird __getattribute__: wird bei JEDEM Attributzugriff aufgerufen (mächtiger, aber auch gefährlicher)
  11. 11__setattr__
    Wird beim Setzen JEDES Attributs aufgerufen: obj.attr = value Vorsicht: self.x = y innerhalb von __setattr__ führt zu unendlicher Rekursion! Verwende object.__setattr__(self, 'x', y) oder __dict__
  12. 12__delattr__
    Wird beim Löschen eines Attributs aufgerufen: del obj.attr Ermöglicht benutzerdefiniertes Verhalten beim Löschen von Attributen
  13. 13__enter__ and __exit__ used for
    Context-Manager-Protokoll für 'with'-Anweisungen: __enter__ läuft am Anfang (gibt den Wert für 'as' zurück) __exit__ läuft am Ende (erhält ggf. Exception-Informationen)
  14. 14Write a simple context manager class
    class MyContext: def __enter__(self): # Setup return self def __exit__(self, exc_type, exc_val, exc_tb): # Aufräumen return False # Exceptions nicht unterdrücken
  15. 15__slots__
    Beschränkt Instanzattribute auf eine feste Menge und verhindert die Erzeugung eines __dict__. Spart Speicher und bringt einen leichten Performance-Vorteil: class Point: __slots__ = ['x', 'y']
  16. 16__str__ vs __repr__
    __str__: menschenlesbarer String (verwendet von str(), print()) __repr__: eindeutige Darstellung zum Debuggen (verwendet von repr(), interaktive Shell) Ziel: eval(repr(obj)) sollte obj wiederherstellen
  17. 17What comparison operators does __lt__ enable?
    __lt__ definiert den Operator <. Python leitet <=, > und >= automatisch ab, wenn du __lt__ und __eq__ definierst und den Decorator functools.total_ordering verwendest
  18. 18Rich comparison methods
    __lt__ (<), __le__ (<=), __eq__ (==), __ne__ (!=), __gt__ (>), __ge__ (>=) Implementiere diese, um das Vergleichsverhalten zu steuern
  19. 19What does __hash__ need to satisfy?
    Objekte, die als gleich gelten, müssen denselben Hashwert haben: wenn a == b, dann hash(a) == hash(b) Der Hash muss über die Lebensdauer des Objekts unveränderlich bleiben Standard: Hash basierend auf id()
  20. 20__bool__
    Definiert den Wahrheitswert eines Objekts im booleschen Kontext (if obj:). Falls nicht definiert, wird __len__ geprüft (0 ist False). Ist auch das nicht definiert, gilt das Objekt als True
  21. 21What arithmetic operators can you override?
    __add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/), __floordiv__ (//), __mod__ (%), __pow__ (**) Auch die reflektierten Versionen: __radd__, __rsub__ usw.
  22. 22Reflected arithmetic methods
    __radd__, __rsub__ usw. Werden aufgerufen, wenn der linke Operand die Operation nicht unterstützt: 3 + obj ruft obj.__radd__(3) auf, wenn int kein __add__ für den Typ von obj hat
  23. 23__getitem__
    Ermöglicht die Index-Notation: obj[key] Wird für eigene Container, Mapping-Typen oder Sequenzen implementiert: class MyList: def __getitem__(self, index): return self.data[index]
  24. 24__setitem__
    Ermöglicht die Zuweisung über Index: obj[key] = value Wird für veränderliche Container verwendet
  25. 25__delitem__
    Ermöglicht das Löschen über Index: del obj[key] Entfernt ein Element aus dem Container
  26. 26__contains__
    Implementiert den 'in'-Operator: key in obj Falls nicht definiert, greift Python auf Iteration und Vergleich mittels __iter__ oder __getitem__ zurück
  27. 27__iter__ vs __next__
    __iter__: gibt das Iterator-Objekt zurück (meist self) __next__: gibt den nächsten Wert zurück und löst StopIteration aus, wenn fertig Zusammen machen sie ein Objekt iterierbar
  28. 28__len__
    Gibt die Länge des Containers zurück, wird von len(obj) aufgerufen Sollte eine nicht-negative Ganzzahl zurückgeben
  29. 29__reversed__
    Gibt einen umgekehrten Iterator zurück: reversed(obj) Falls nicht definiert, greift reversed() auf __len__ und __getitem__ zurück
  30. 30__missing__ in dict subclasses
    Wird von __getitem__ aufgerufen, wenn der Schlüssel nicht gefunden wird. Ermöglicht ein benutzerdefiniertes Standardverhalten: class MyDict(dict): def __missing__(self, key): return f'Standard für {key}'

And 67 more cards. Study the whole deck free

Articles about this deck

More Programming decks

See all
Study all 97 cards free