Python new Schlüsselwort

Aditya Raj 30 Januar 2023
  1. Was ist das new Schlüsselwort in Python?
  2. Wie verwende ich das new Schlüsselwort in Python?
  3. Wie können wir die Methode __new__() explizit implementieren?
  4. Abschluss
Python new Schlüsselwort

In Programmiersprachen wie C++ und Java können Sie das Schlüsselwort new explizit verwenden, um ein Objekt aus einer Klasse zu erstellen. Sie können das Schlüsselwort new jedoch nicht direkt in Python verwenden. In diesem Artikel werden wir diskutieren, wie das new Schlüsselwort in Python funktioniert. Wir werden auch sehen, wie wir das Schlüsselwort new explizit verwenden können, um den Prozess der Objekterstellung in Python zu beobachten.

Was ist das new Schlüsselwort in Python?

In Python ist __new__ ein den Objekten zugeordnetes Attribut. Mit der Funktion dir() können Sie alle Attribute eines Objekts überprüfen. Die Funktion dir() nimmt das Objekt als Eingabe und gibt eine Liste aller Objektattribute wie folgt zurück.

class Car:
    def __init__(self, model, brand, price, country):
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country


myCar = Car("Tesla", "Cybertruck", 40000, "USA")
print(dir(myCar))

Ausgabe:

['Brand', 'Country', 'Model', 'Price', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Sie können feststellen, dass in der Liste ein __new__-Attribut vorhanden ist.

Wie verwende ich das new Schlüsselwort in Python?

Wir können das Schlüsselwort new in Python nicht explizit verwenden, wie wir es in anderen Programmiersprachen tun. Das Attribut __new__ in Python funktioniert jedoch genauso wie das Schlüsselwort new in anderen Programmiersprachen. Die Methode __new__() ist in der Basisklasse object definiert und dient dazu, einem Objekt Speicherplatz zuzuweisen.

Wenn wir ein neues Objekt erstellen, indem wir den Klassennamen mit der Syntax className() aufrufen, wird die Methode __call__() der Klasse ausgeführt. Die Methode __call__() ruft die Methode __new__() auf. Hier allokiert die Methode __new__() Speicher für das Objekt und gibt die Kontrolle an die Methode __call__() zurück.

Die Methode __call__() ruft dann die Methode __init__() auf. Die Methode __init__() initialisiert die Klassenvariablen und gibt die Kontrolle an die Methode __call__() zurück. Die Methode __call__() beendet dann die Ausführung und gibt die Referenz auf das erstellte Objekt an uns zurück.

Wie können wir die Methode __new__() explizit implementieren?

Wir müssen die Methode __new__() in Python nicht explizit implementieren. Wenn Sie jedoch die Reihenfolge sehen möchten, in der die Methode __new__() und die Methode __init__() ausgeführt werden, können wir die Methode __new__() überschreiben. Wie wir oben gesehen haben, ist die Methode __new__() eine statische Methode und wird in der Objektklasse definiert. Wenn wir ein Objekt mit dem Klassennamen erstellen, wird seine Methode __new__() automatisch aufgerufen.

Die Methode __new__() nimmt ein Eingabeargument cls entgegen, das die aktuelle Klasse repräsentiert. Dann ruft die Methode __new__() die Methode __new__() ihrer Oberklasse mit der aktuellen Klasse als Eingabeargument auf. Dieser Prozess muss fortgesetzt werden, bis wir die Basisklasse Objekt erreichen. In der Basisklasse object wird die Methode __new__() ausgeführt und Speicher für das zu erstellende Objekt zugewiesen. Dann wird eine Instanz des Objekts erstellt. Die Methode __new__() gibt dann die Instanz zurück, wonach die Methode __init__() verwendet wird, um die Variablen in der Instanz zu initialisieren.

Sie können diesen gesamten Vorgang im folgenden Beispiel beobachten.

class Car:
    def __init__(self, brand, model, price, country):
        print("I am in the __init__() method.")
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country

    def __new__(cls, *args, **kwargs):
        print("I am in the __new__() method.")
        return super(Car, cls).__new__(cls)


myCar = Car("Tesla", "Cybertruck", 40000, "USA")

Ausgabe:

I am in the __new__() method.
I am in the __init__() method.

Hier gehört die Methode __new__(), die wir implementiert haben, zur aktuellen Klasse und beeinflusst nicht die Art und Weise, wie eine Instanz eines Objekts erstellt wird. Um das zu ändern, müssen wir die Methode __new__() in der Basisklasse object ändern. Dies ist uns jedoch nicht gestattet, und Sie sollten nicht versuchen, ein solches Experiment durchzuführen. Außerdem können Sie in der Ausgabe überprüfen, dass die Methode __new__() vor der Methode __init__() ausgeführt wird.

Abschluss

Wir haben das neue Schlüsselwort in Python in diesem Artikel besprochen. Wir haben auch gesehen, wie wir mit der Methode dir() alle Attribute einer Klasse abrufen können. Außerdem haben wir auch gesehen, wie in Python ein Objekt erstellt wird und wie die Methode __new__() funktioniert. Auch die Methode __new__() haben wir selbst implementiert. Es ist jedoch nicht sehr nützlich, und ich würde vorschlagen, dass Sie die Methode __new__() nicht selbst implementieren.

Autor: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

Verwandter Artikel - Python Class