Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in gängige integrierte Member in Python objektorientiert

Einführung in gängige integrierte Member in Python objektorientiert

WBOY
WBOYnach vorne
2023-04-12 09:10:081787Durchsuche

Okay, heute analysieren wir weiterhin Klassen in Python.

[[441842]]

Als wir die Klasse zuvor definiert haben, ist der Konstruktor in Python eine ganz besondere Funktion, außer dem Konstruktor hat auch viele andere Funktionen im Format __XXX__, und es gibt auch einige __xx__-Attribute. Lassen Sie uns nacheinander darüber sprechen:

Konstruktor

Einführung in gängige integrierte Member in Python objektorientiert

Der Konstruktor aller Klassen in Python ist __init__. Entsprechend unseren Anforderungen ist der Konstruktor in parametrisierte Konstruktoren und Parameterlose Konstruktoren unterteilt. Wenn derzeit kein Konstruktor definiert ist, generiert das System automatisch einen parameterlosen und leeren Konstruktor. Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

In einer Klasse mit einer Vererbungsbeziehung ruft die untergeordnete Klasse bei ihrer Erstellung den Konstruktor der übergeordneten Klasse auf, um das übergeordnete Klassenobjekt zu erstellen, solange die übergeordnete Klasse explizit definiert ist Die untergeordnete Klasse erbt nicht von der übergeordneten Klasse. Geerbte Eigenschaften werden ebenfalls automatisch implementiert. Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

Wenn die Unterklasse Attribute von der übergeordneten Klasse erben und erhalten möchte, muss sie explizit den Konstruktor der übergeordneten Klasse aufrufen, um diese abzurufen. Andernfalls kann sie nur die Methoden der übergeordneten Klasse abrufen. Zum Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

Hier müssen wir ein neues Konzept einführen, nämlich Funktionsüberladung. Wenn es innerhalb einer Klasse mehrere Funktionen mit demselben Namen und unterschiedlichen Funktionsparametern (unterschiedliche Zahlen, Typen und Reihenfolgen) gibt, nennen wir diese Funktionen überladene Funktionen und der Rückgabewert der Funktion wird nicht als Grundlage für die Überladung verwendet. Wir haben ähnliche Konzepte in Java und C++. Allerdings ist Python eine dynamische Programmiersprache und ihre Daten haben keine Datentypen. Daher können wir nicht mehrere Methoden mit demselben Namen innerhalb der Klasse haben, was auch bei unserer Konstruktormethode nicht der Fall ist schreibe es, oder wir können nur eines schreiben. Wenn Sie es nicht schreiben, generiert das System automatisch einen leeren Konstruktor ohne Parameter. Wenn Sie es schreiben, können Sie nur diesen Konstruktor aufrufen. Als wir etwas über Dekorateure lernten, schienen wir außerdem mehrere Methoden mit demselben Namen in der Klasse geschrieben zu haben, zum Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

Sind diese Methoden mit demselben Namen also eine überladene Beziehung? Nein, weil sie sind keine vollständigen Methoden. Sie müssen @property-, @name.setter- und @name.deleter-Einschränkungen hinzufügen, um vollständig zu sein, sodass es sich hierbei nicht um eine Funktionsüberladung handelt.

Destruktor

Der Konstruktor wird automatisch ausgeführt, wenn das Objekt erstellt wird, und seine Hauptaufgabe besteht darin, das Objekt zu initialisieren. Der Destruktor wird automatisch ausgeführt, wenn das Objekt zerstört wird (del wird ausgeführt oder recycelt), und seine Hauptaufgabe besteht darin, das Objekt zu recyceln. Wenn wir zuvor keinen Destruktor geschrieben haben, generiert das System automatisch einen leeren Destruktor. Als nächstes schreiben wir einen Destruktor. Die Destruktormethode in Python heißt __del__. Zum Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

Wir nennen es so:

Einführung in gängige integrierte Member in Python objektorientiert

wird ausgeführt als

Einführung in gängige integrierte Member in Python objektorientiert

Hier möchten wir uns auf den Garbage-Collection-Mechanismus von Python konzentrieren.

Derzeit widmen Programmierer dem Garbage-Collection-Mechanismus des Systems keine besondere Aufmerksamkeit, da sich die Hardware derzeit sehr schnell entwickelt und der uns zur Verfügung stehende Ressourcenspeicher sehr gering ist mit 8G, was nicht ausreicht, um mehr hinzuzufügen. Für einige High-End-Jobs und Hochpräzisionsindustrien ist der Speicherbereinigungsmechanismus jedoch immer noch sehr wichtig. Lassen Sie uns hier also den Garbage-Collection-Mechanismus in Python klären.

Der Garbage-Collection-Mechanismus in Python basiert hauptsächlich auf der Referenzzählung. Das System weist jedem Objekt einen Referenzzähler zu, um die Häufigkeit der Verwendung des aktuellen Objekts aufzuzeichnen. Da es sich um Zählen handelt, gibt es Additions- und Subtraktionsoperationen. Das System schreibt vor, dass der Zähler um 1 erhöht wird, wenn die folgenden Bedingungen erfüllt sind:

1. Erstellen Sie ein neues Objekt.

2. Referenzieren Sie ein Objekt.

3.

Verringern Sie den Zähler um 1, wenn die folgenden Bedingungen erfüllt sind:

1. Führen Sie den Löschvorgang für das Objekt aus

2. Der Referenz des Objekts wird ein neuer Wert zugewiesen

3 Das Objekt verlässt den aktuellen Bereich (am häufigsten wird der Funktionsbereich verlassen)

In Python erhalten wir das Objekt über sys.getrefcount (Objektname). ) Der aktuelle Referenzzähler. Beachten Sie, dass der Referenzzähler hier nicht unbedingt 1 ist, da das System temporäre Referenzen enthält. Erst wenn der Referenzzähler, der auf das Objekt zeigt, 0 wird (zum ersten Mal der Anfangswert), wird das Objekt tatsächlich zerstört und der Destruktor des Objekts wird ausgeführt. Zum Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

Die Ausgabe ist

Einführung in gängige integrierte Member in Python objektorientiert

Beachten Sie, dass der Rückgabewert 4 beim ersten Aufruf von sys.getrefcount(ad) bedeutet, dass das aktuelle System andere temporäre Verwendungszwecke hat, also haben wir Am Ende muss nur 4 erreicht werden. Nach der Erklärung kehrt es in den Ausgangszustand zurück. Wenn delad schließlich auftritt, werden auch die temporären Systemreferenzen freigegeben. Unsere aktuelle Betriebsumgebung ist win+pycharm. Ändern wir den Code noch einmal:

Einführung in gängige integrierte Member in Python objektorientiert

Die Ausgabe ist

Einführung in gängige integrierte Member in Python objektorientiert

Wie aus der obigen Ausgabe ersichtlich ist, scheint das System andere Operationen am Basisdatentyp durchzuführen, was dazu führt, dass sein anfänglicher Referenzzähler gleich ist größer als wir erwartet hatten. Der Referenzdatentyp data entspricht genau unseren Erwartungen.

Erst wenn das Objekt endgültig freigegeben wird (wenn der Referenzzähler 0 ist), wird die Destruktormethode __del__ ausgeführt.

__str__-Methode

Schauen Sie sich zunächst unseren Code an:

Einführung in gängige integrierte Member in Python objektorientiert

Die Ausgabe ist

Einführung in gängige integrierte Member in Python objektorientiert

Wenn wir das Objekt drucken, erhalten wir die Speicheradresse des Objekts. Kann es wie die Grunddaten gedruckt werden? Typ? Wie wäre es mit dem Drucken unseres Referenzdatentyps auf die gleiche Weise wie Daten? Beispielsweise sollte die obige Klasse Student ihre Instanzvariablen drucken.

Die __str__-Methode, die wir jetzt erwähnt haben, dient dazu, diese Funktion zu vervollständigen. Dieser Rückgabewert ist der Ausgabewert, wenn wir print ausführen, sodass wir ihn in der __str__-Methode formatieren können. Zum Beispiel:

Einführung in gängige integrierte Member in Python objektorientiert

Die Ausgabe ist

Einführung in gängige integrierte Member in Python objektorientiert

Wie aus der obigen Ausgabe ersichtlich ist, müssen wir die __str__-Methode in dieser Klasse überschreiben, wenn wir formatierte Referenzdatentypdaten ausgeben möchten Mit dieser Methode können Sie den Ausgabeinhalt des aktuellen Inhalts festlegen. Diese __str__-Methode ist eine Methode der Objektklasse, da alle Klassen in Python direkt oder indirekt von Objekten abgeleitet sind, sodass jeder Referenzdatentyp eine __str__-Methode hat. Wir müssen diese Methode nur überschreiben, um die Methode der übergeordneten Klasse zu überschreiben. Andernfalls ruft das System standardmäßig die Methode __str__ im Objekt auf.

__dict__

Einige Leute haben vielleicht gefragt, woher ich weiß, welche integrierten Mitglieder (Eigenschaften und Methoden) meine Klasse hat. Ich weiß zum Beispiel nichts über die __str_-Methode Klasse Es gibt dort tatsächlich eine Eigenschaft, die den gesamten integrierten Inhalt dieser Klasse ausdrucken kann. Das ist __dict__. Beachten Sie, dass __dict__ ein Attribut und keine Methode ist, wenn Sie More aufrufen. Was ist für Objekte von Bedeutung, da Methoden von allen Objekten gemeinsam genutzt werden? Die Daten sind für sich selbst eindeutig und müssen nur die Adresse des aktuellen Objekts tragen, um die Methode der Klasse (dh self) auszuführen. Student ist eine Klasse und eine Klasse besteht aus Attributen und Methoden, sodass die Ausgabe von Student.__dict__ etwas mehr ist, einschließlich Methoden und Attributen.

Wenn Sie wissen möchten, welche integrierten Mitglieder die übergeordnete Klasse dieser Klasse hat, geben Sie einfach das __dict__-Attribut der übergeordneten Klasse aus. Schauen wir uns zum Beispiel die integrierten Mitglieder des übergeordneten Klassenobjekts der Student-Klasse wie folgt an:

Einführung in gängige integrierte Member in Python objektorientiert

Die Ausgabe von Ojbect.__dict__ ist etwas länger. Drucken Sie sie selbst aus und werfen Sie einen Blick darauf. Es muss eine Beschreibung von __str__ darin enthalten sein.

Okay, heute sind wir mit dem Konstruktor __init__, dem Destruktor __del__, der integrierten Funktion __str__, dem Attribut __dict__ usw. in Kontakt gekommen. Morgen werden wir weiterhin andere integrierte Mitglieder objektorientiert analysieren .

Das obige ist der detaillierte Inhalt vonEinführung in gängige integrierte Member in Python objektorientiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen