So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python

Möglicherweise können Sie mit __new__ () in Python eine Instanz einer bestimmten Klasse aus dict erstellen. Es kann von Zeit zu Zeit bequem sein. So umgehen Sie das definierte __init __ () und erstellen eine Instanz.

So erstellen Sie eine normale Instanz

Es wird angenommen, dass die folgende Klasse definiert ist.

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return "{self.__class__.__name__}({self.name}, {self.age})".format(self=self)

Normalerweise wird der Wert als direktes Argument übergeben und wie unten gezeigt initialisiert.

p = Person("foo", 20)
print(p)
# Person(foo, 20)

Umstellung vom Diktat

Wenn Sie eine Instanz aus dict erstellen möchten, können Sie sie so schreiben.

d = {"name": "foo", "age": 20}
p = Person.__new__(Person)
p.__dict__.update(d)
print(p)
Person(foo, 20)

Ist "Person (** d)" nicht genug?

Im Fall des vorherigen Beispiels kann "Person (** d)" auch verwendet werden, um eine Instanz unter Verwendung von Diktatdaten zu erstellen. Ist das genug?

Manchmal ist das nicht der Fall. Wenn Sie beispielsweise Testdaten erstellen, möchten Sie möglicherweise direkt mit dem berechneten Wert initialisieren. Eine Situation, in der init () in einer solchen Klasse mit verschiedenen störenden Berechnungen definiert ist und Sie die Berechnungen umgehen und einen direkten Wert zum Initialisieren der Instanz angeben möchten.

class X(object):
    def __init__(self, d):
        self.y = foo(d)
        self.z = boo(d)

Einzelheiten

__new__ () wird verwendet, um ein Objekt zu erstellen, wenn die Klasse als aufrufbares Objekt verwendet wird.

  1. Erstellen Sie ein Objekt mit new ()
  2. Initialisieren Sie das Objekt mit __init __ ()

Außerdem wird die Instanzvariable des Objekts selbst in "self .__ dict__" gespeichert. Daher kann gesagt werden, dass nur das Objekt von __new__ () erstellt wird und das __dict __ später aktualisiert wird.

Hinweis

Beachten Sie natürlich, dass __init __ () nicht aufgerufen wird.

class X(object):
    def __init__(self, d):
        self.x = foo(d)
        self.y = boo(d)
        raise RuntimeError("hmm")


x = X.__new__(X)
x.__dict__.update({"y": 10, "z": 20})
print(x, x.y, x.z)
# <__main__.X object at 0x10f7e4f28> 10 20

Recommended Posts

So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
Verschiedene Möglichkeiten, um in Python ein Array von Zahlen von 1 bis 10 zu erstellen.
So erstellen Sie eine JSON-Datei in Python
So generieren Sie eine neue Protokollgruppe in CloudWatch mit Python in Lambda
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[GCF + Python] So laden Sie Excel in GCS hoch und erstellen eine neue Tabelle in BigQuery
So erstellen Sie mit Python ein radiales Profil aus astronomischen Bildern (Chandra, XMM usw.)
Verwendung der NUITKA-Utilities-Hinweis-Kompilierung zum einfachen Erstellen einer ausführbaren Datei aus einem Python-Skript
Nehmen Sie eine Instanz einer Python-Ausnahmeklasse nicht direkt als Argument für die Ausnahmeklasse!
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
Verwendung der Methode __call__ in der Python-Klasse
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Ein Memo zum Generieren dynamischer Klassenvariablen aus Wörterbuchdaten (dict), die in Python3 nur Standardtypdaten enthalten
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
[Python] So erstellen Sie eine Tabelle aus einer Liste (grundlegende Operation zum Erstellen von Tabellen / Ändern des Matrixnamens)
So bestimmen Sie die Existenz eines Selenelements in Python
Wie Sie die interne Struktur eines Objekts in Python kennen
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
So überprüfen Sie die Speichergröße einer Variablen in Python
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
So erstellen Sie einen Klon aus Github
[Einführung in Python] Wie verwende ich eine Klasse in Python?
[Python] Wie man eine Klasse iterierbar macht
Wie bekomme ich Stacktrace in Python?
Verwendung von __slots__ in der Python-Klasse
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
So erstellen Sie ein Repository aus Medien
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
So formatieren Sie eine Liste von Wörterbüchern (oder Instanzen) in Python
"Cython" -Tutorial, um Python explosiv zu machen: So analysieren Sie die in C ++ - Code definierte Enum-Klasse mit Enum in Python.
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Erstellen Sie eine GIF-Datei mit Pillow in Python
So öffnen Sie einen Webbrowser über Python
So löschen Sie einen Taple in einer Liste (Python)
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Zusammenfassung zum Importieren von Dateien in Python 3
Ich möchte mit Python ein Fenster erstellen
Erstellen Sie eine neue Todoist-Aufgabe aus Python Script
So generieren Sie ein Python-Objekt aus JSON
Zusammenfassung der Verwendung von MNIST mit Python
So benachrichtigen Sie Discord-Kanäle in Python
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
So erstellen Sie eine Rest-API in Django
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python