Anonyme Objekte in Python

Muhammad Maisam Abbas 21 Juni 2023
  1. Erstellen Sie anonyme Objekte mit der Klasse namedtuple in Python
  2. Erstellen Sie anonyme Objekte mit der Funktion type() in Python
Anonyme Objekte in Python

In diesem Tutorial werden die Methoden zum Erstellen anonymer Objekte in Python erläutert.

Erstellen Sie anonyme Objekte mit der Klasse namedtuple in Python

Ein anonymes Objekt ist nur ein Wert ohne echten Namen. Daher heißt es anonym.

Manchmal ist es einfacher, ein anonymes Objekt zum Halten von Werten zu erstellen, als eine ganz neue Klasse zu definieren.

Standardmäßig unterstützt die Programmiersprache Python im Gegensatz zu C# und Java keine anonymen Klassen. Aber mit ein wenig Kreativität können wir eine Problemumgehung finden und die Funktionalität anonymer Objekte nachahmen.

Für den Anfang können wir die namedtuple-Klasse im collections-Modul von Python verwenden, um anonyme Objekte nachzuahmen. Der folgende Code zeigt, wie wir anonyme Objekte mit der Python-Klasse namedtuple erstellen können.

from collections import namedtuple

anonymousClass = namedtuple("variables", ["foo", "woo", "boo"])

obj1 = anonymousClass(foo=1, woo=2, boo="3")
obj1.boo

Ausgang:

'3'

Wir haben zuerst das benannte Tupel anonymousClass mit namedtuple("variables", ['foo', 'woo', 'boo'] initialisiert. Im Konstruktor haben wir ein Schlüssel/Wert-Paar übergeben, bei dem der Wert eine Liste von ist Variablennamen, in denen wir unsere temporären Werte speichern.

In unserem Anwendungsfall hat alles, was wir als Schlüssel des Konstruktors übergeben, keine großen Auswirkungen auf unser Ergebnis. Wir können nun dieses anonymousClass-Objekt verwenden, um anonyme Objekte mit obj1 = anonymousClass(foo=1, woo=2, boo='3') zu erstellen.

Das Gute an dieser Methode ist, dass das Objekt anonymousClass wiederverwendbar ist und wir beliebig viele anonyme Objekte erstellen können. Der Hauptnachteil dieses Ansatzes besteht darin, dass wir die Anzahl der Variablen kennen müssen, während wir das namedtuple initialisieren.

Erstellen Sie anonyme Objekte mit der Funktion type() in Python

Eine andere Möglichkeit, ein anonymes Objekt zu deklarieren, ist die Funktion type() in Python. Die Funktion type() benötigt 3 Parameter; der Name des neuen Datentyps, der Datentyp der darin enthaltenen Werte und eine Reihe von Werten.

Das folgende Code-Snippet zeigt, wie wir das Verhalten von anonymen Objekten mit der Funktion type() in Python nachahmen können.

obj = type("", (object,), {"foo": 1, "woo": 2, "boo": "3"})()
obj.boo

Ausgang:

'3'

Im obigen Code haben wir dem ersten Parameter der Funktion type() einen leeren String übergeben, der dem Namen des neuen Datentyps entspricht. Der zweite Parameter ist der als object spezifizierte Datentyp.

Der dritte Parameter ist ein Satz von Werten, die in Schlüssel/Wert-Paaren angegeben werden, wobei der Schlüssel der Name der Variablen und der Wert der entsprechende Wert ist. Im Vergleich zu unserem bisherigen Ansatz hat dieser Ansatz seine Vor- und Nachteile.

Der offensichtliche Nachteil hier ist, dass wir das obj nicht wiederverwenden können, um anonymere Objekte zu initialisieren, anders als die anonymousClass im vorherigen Beispiel. Der Vorteil dieses Ansatzes besteht darin, dass wir mehr Variablen angeben können, ohne sie zuerst zu deklarieren.

Diese type()-Funktion kann modifiziert werden, um neue Werte aufzunehmen, ohne zuerst ihren Namen anzugeben, indem dict anstelle des object-Datentyps verwendet wird. Das folgende Code-Snippet zeigt uns die Funktionsweise dieser Methode.

obj3 = type("", (dict,), {"foo": 1, "woob": 2})()
obj3.boo = 123
obj3.boo

Ausgang:

123

Im obigen Code haben wir das object aus dem vorherigen Beispiel durch dict ersetzt.

Beide oben diskutierten Methoden haben ihre Vor- und Nachteile gegenüber einander. Keiner von ihnen ist ein klarer Gewinner, und welcher davon abhängt, hängt von unserem Anwendungsfall ab.

Wenn wir bereits die Anzahl der Werte kennen, die wir am Ende speichern werden, Sie aber mehrere anonyme Objekte benötigen, würde die Methode namedtuple besser funktionieren. Wenn wir die Anzahl der Werte nicht kennen, aber nur ein oder zwei anonyme Objekte benötigen, wäre die Methode type() besser.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Python Object