Anonyme Klassen und Objekte in Python erkunden
Pythons eingebaute type()-Funktion gibt die Klasse zurück, zu der ein Objekt gehört. In Python sind sowohl eingebaute als auch benutzerdefinierte Klassen Objekte vom Typ class.
Beispiel
class myclass: def __init__(self): self.myvar = 10 return obj = myclass() print('class of int', type(int)) print('class of list', type(list)) print('class of dict', type(dict)) print('class of myclass', type(myclass)) print('class of obj', type(obj))
Ausgabe:
class of int <class 'type'> class of list <class 'type'> class of dict <class 'type'> class of myclass <class 'type'>
type() hat eine Dreierargument-Version:
Syntax
newclass = type(name, bases, dict)
Damit lässt sich eine Klasse dynamisch erstellen. Die drei Argumente:
- name – Name der Klasse, wird zum __name__-Attribut der neuen Klasse.
- bases – Tupel der Elternklassen. Kann leer sein, wenn keine Basisklasse.
- dict – Dictionary als Namespace der neuen Klasse mit Attributen, Methoden und Werten.
Anonyme Klasse erstellen
Mit der Dreierargument-Version von type() können wir eine anonyme Klasse erstellen. Das name-Argument ist ein leerer String, das zweite Argument ein Tupel mit der Klasse object (jede Python-Klasse erbt von object). Das dritte Argument-Dictionary fügen wir Instanzvariablen hinzu – hier leer.
anon = type('', (object,), {})
Anonymes Objekt erstellen
Ein Objekt dieser anonymen Klasse:
obj = anon() print("type of obj:", type(obj))
Ergebnis zeigt, dass das Objekt der anonymen Klasse angehört:
type of obj: <class '__main__.'>
Beispiel: Anonyme Klasse und Objekt mit Attributen und Methoden
Wir können auch Instanzvariablen und -methoden dynamisch hinzufügen:
def getA(self): return self.a obj = type('', (object,), {'a': 5, 'b': 6, 'c': 7, 'getA': getA, 'getB': lambda self: self.b})() print(obj.getA(), obj.getB())
Ausgabe:
5 6
Python
- Python vs. Go: Welche Sprache gewinnt für Ihr Projekt?
- Python Zahlen: Unveränderliche numerische Datentypen verstehen
- Python Exception Handling meistern: try, except, else und finally erklärt
- Tic-Tac-Toe in Python programmieren: Schritt-für-Schritt-Tutorial mit Code
- Python Unit Testing mit PyUnit meistern: Ein praktischer Leitfaden & Beispiel
- Pythons map()-Funktion meistern: Syntax, Beispiele und Best Practices
- Python: Aktuelle Uhrzeit und Zeitzonendaten einfach abrufen
- Der exklusive Real Python Slack Community für Python-Entwickler beitreten
- Verzeichnis- und Dateioperationen in Python meistern
- Pythons @property Decorator meistern: Saubere, rückwärtskompatible Getter & Setter