==== 3. Python Mixin (Mehrfachvererbung) ====
=== Was ist ein Mixin in Python? ===
Ein Mixin
* ist eine Klasse, welche Methodenimplementierungen zur Wiederverwendung durch mehrere verwandte, untergeordnete Klassen bereitstellt. Die Vererbung impliziert jedoch keine Ist-ein-Beziehung.
* definiert keinen neuen Typen. Daher ist es nicht zur direkten Instanziierung vorgesehen.
* bündelt eine Reihe von Methoden zur Wiederverwendung. Jedes Mixin sollte ein einziges spezifisches Verhalten haben und eng verwandte Methoden implementieren.
=== Python Mixin Beispiel ===
Zunächst wird die Klasse ''Person'' implementiert:
class Person:
def __init__(self, name):
self.name = name
Dann wird eine Klasse ''Employee'' definiert, die von ''Person'' erbt:
class Employee(Person):
def __init__(self, name, skills, dependents):
super().__init__(name)
self.skills = skills
self.dependents = dependents
Zuletzt wird eine neue Instanz von ''Employee'' erzeugt:
if __name__ == '__main__':
e = Employee(
name='John',
skills=['Python Programming''Project Management'],
dependents={'wife': 'Jane', 'children': ['Alice', 'Bob']}
)
=== Mehrerer Mixin Klassen kombinieren ===
Angenommen, Sie möchten das ''Employee'' Objekt zu JSON konvertieren. Dazu können Sie zunächst eine neue Mixin-Klasse definieren, die das Standardmodul ''json'' verwendet:
import json
class JsonMixin:
def to_json(self):
return json.dumps(self.__dict__)
Ergänzen Sie dann die Klasse ''Employee'' so, dass sie zusätzlich von ''JsonMixin'' erbt, wodurch die Methode ''to_json'' auf ''Employee'' verfügbar wird:
class Employee(JsonMixin, Person):
def __init__(self, name, skills, dependents):
super().__init__(name)
self.skills = skills
self.dependents = dependents
Im Folgenden wird eine neue Instanz der Klasse ''Employee'' erstellt und nach JSON konvertiert:
if __name__ == '__main__':
e = Employee(
name='John',
skills=['Python Programming''Project Management'],
dependents={'wife': 'Jane', 'children': ['Alice', 'Bob']}
)
print(e.to_json())
----
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Daniel Fahrni
**Quellen**:
* [[https://www.pythontutorial.net/python-oop/python-mixin/|Python mixin | pythontutorial.net]]
* [[https://medium.com/the-techlife/python-up-your-code-mixins-3b26e76c0f45|Python Up Your Code: Mixins | medium.com]]