English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Artikel werden Sie die Kernfunktionen von Python, Python-Objekte und Klassen lernen. Sie werden lernen, was eine Klasse ist, wie man sie erstellt und wie man sie in einem Programm verwendet.
Python ist eine objektorientierte Programmiersprache. Im Gegensatz zur funktionsorientierten Programmentwicklung, die hauptsächlich auf Funktionen ausgerichtet ist, liegt der Fokus der objektorientierten Programmentwicklung auf den Objekten.
Ein Objekt ist eine Sammlung von Daten (Variablen) und Methoden (Funktionen), die auf diese Daten angewendet werden. Und die Klasse ist der Grundplan des Objekts.
Kann man die Klasse als Skizze (Prototyp) eines Hauses betrachten. Es enthält alle Details über den Boden, die Türen, die Fenster usw. Basierend auf diesen Beschreibungen bauen wir Häuser. Das Haus ist ein Objekt.
Da viele Häuser durch Beschreibungen erstellt werden können, können wir viele Objekte basierend auf der Klasse erstellen. Objekte werden auch als Beispiele der Klasse bezeichnet. Der Prozess der Objekterstellung wird alsInstanziierung.
wie die Funktionsdefinition mit dem Schlüsselwortdefwie am Anfang, in Python verwenden wir den Schlüsselwortclassdefiniert eineKlasse.
Der erste String wird als docstring bezeichnet und enthält eine kurze Beschreibung der Klasse. Obwohl es nicht obligatorisch ist, wird empfohlen, dies zu tun.
Dies ist eine einfache Klassendefinition.
class MyNewClass: '''Dies ist eine Dokumentationszeichenfolge. Ich habe eine neue Klasse erstellt''' pass
Eine Klasse erstellt einen neuen lokalenNamensraumund darin alle Eigenschaften definieren. Attribute können Daten oder Funktionen sein.
Es gibt einige spezielle Attribute, die mit doppelten Unterstrichen (__) beginnen. Zum Beispiel gibt uns __doc__ die Dokumentationszeichenfolge der Klasse.
Sobald eine Klasse definiert ist, wird eine neue Klasse mit dem gleichen Namen erstellt. Dieser Klassenobjekt ermöglicht es uns, auf verschiedene Eigenschaften zuzugreifen und neue Objekte der Klasse zu instanziieren.
class MyClass: "Das ist meine zweite Klasse" a = 10 def func(self): print('Hallo') # Ausgabe: 10 print(MyClass.a) # Ausgabe: <function MyClass.func at 0x0000000003079BF8> print(MyClass.func) # Ausgabe: 'Das ist meine zweite Klasse' print(MyClass.__doc__)
Wenn Sie das Programm ausführen, wird der Ausgabe:
10 <function 0x7feaa932eae8="" at="" myclass.func="" Das ist meine zweite Klasse
Wir haben gesehen, dass Klassenobjekte zur Zugriff auf verschiedene Eigenschaften verwendet werden können.
Es kann auch verwendet werden, um ein neues Beispielobjekt der Klasse zu erstellen (Instanziierung). Der Prozess der Objekterstellung ähneltFunktionAufruf.
>>> ob = MyClass()
Das erstellt ein neues Beispielobjekt ob. Wir können die Eigenschaften des Objekts mit einem Präfix des Objektnamens aufrufen.
Attribute können Daten oder Methoden sein. Die Methoden eines Objekts sind die entsprechenden Funktionen der Klasse. Jedes als Klassenattribut definierte Funktionsobjekt definiert eine Methode für das Objekt der Klasse.
Das bedeutet, da MyClass.func ein Funktionsobjekt (Klassenattribut) ist, wird ob.func ein Methodenobjekt.
class MyClass: "Das ist meine zweite Klasse" a = 10 def func(self): print('Hallo') # Erstellen Sie eine neue MyClass ob = MyClass() # Ausgabe: <function MyClass.func at 0x000000000335B0D0> print(MyClass.func) # Ausgabe: <bound method MyClass.func of <__main__.MyClass object at 0x000000000332DEF0>> print(ob.func) # Rufe Funktion func() auf # Ausgabe: Hello ob.func()
Sie haben wahrscheinlich den self-Parameter in der Definition der internen Funktion der Klasse bemerkt, aber wir haben diese Methode nur als ob.func() abgekürzt, ohneParameter. Es ist immer noch gültig.
Das liegt daran, dass das Objekt immer selbst als erstes Argument übergeben wird, wenn es seine Methode aufruft. Daher wird ob.func() automatisch in MyClass.func(ob) umgewandelt.
Normalerweise entspricht der Aufruf einer Methode mit einer Parameterliste dem Aufruf einer Funktion mit einer Parameterliste, die durch Einfügen des Objekts vor dem ersten Parameter erstellt wird.
Aus diesen Gründen muss der erste Parameter der Funktion in der Klasse der Objekt selbst sein. Dies wird normalerweise alsself. Man kann andere Namen verwenden, aber wir empfehlen dringend, die Konventionen zu befolgen.
Jetzt müssen Sie sich mit Klassenobjekten, Instanzobjekten, Funktionsobjekten, Methodenobjekten und ihren Unterschieden vertraut machen.
Funktionen, die mit einem doppelten Unterstrich (_) beginnen, werden als spezielle Funktionen bezeichnet, weil sie eine spezielle Bedeutung haben.
__init__()-Funktion ist besonders nützlich. Jedes Mal, wenn ein neuer Objekt der Klasse instanziert wird, wird diese spezielle Funktion aufgerufen.
Diese Art von Funktion wird in der objektorientierten Programmierung (OOP) auch als Konstruktor bezeichnet. Wir verwenden ihn normalerweise, um alle Variablen zu initialisieren.
class ComplexNumber: def __init__(self, r = 0, i = 0): self.real = r self.imag = i def getData(self): print("{0}+{1}}.format(self.real, self.imag)) # Erstelle einen neuen ComplexNumber-Objekt c1 = ComplexNumber(2,3) # Rufe die getData()-Funktion auf # Ausgabe: 2+3j c1.getData() # Erstelle einen neuen ComplexNumber-Objekt # Erstelle eine neue Eigenschaft 'attr' c2 = ComplexNumber(5) c2.attr = 10 # Ausgabe: (5, 0, 10) print((c2.real, c2.imag, c2.attr)) # Aber c1Das Objekt hat keine Eigenschaft "attr" # AttributeError: 'ComplexNumber'-Objekt hat keine Eigenschaft 'attr' c1.attr
Im obigen Beispiel haben wir eine neue Klasse definiert, um Komplexe Zahlen darzustellen. Sie hat zwei Funktionen, __init__() um Variablen zu initialisieren (Standardwert Null), getData() um die Zahl korrekt anzuzeigen.
Eine interessante Sache, die man in den obigen Schritten beachten sollte, ist, dass man Attribute dynamisch erstellen kann. Wir haben für das Objekt c2Es wurde eine neue Eigenschaft attr erstellt und gelesen. Dies hat jedoch nicht für das Objekt c1Erstellen Sie diese Eigenschaft.
Mit dem del-Anweisung kann jederzeit eine beliebige Eigenschaft des Objekts gelöscht werden. Versuchen Sie im Python-Shell die folgenden Operationen, um die Ausgabe anzuzeigen.
>>> c1 = ComplexNumber(2,3) >>> del c1.imag >>> c1.getData() Traceback (letzter Aufruf): ... AttributeError: 'ComplexNumber'-Objekt hat keine Eigenschaft 'imag' >>> del ComplexNumber.getData >>> c1.getData() Traceback (letzter Aufruf): ... AttributeError: 'ComplexNumber'-Objekt hat keine Eigenschaft 'getData'
Wir können sogar den Objekt selbst mit dem del-Anweisung löschen.
>>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (letzter Aufruf): ... NameError: 'c' ist nicht definiert1'is not defined'
Tatsächlich ist es komplexer. Nachdem es abgeschlossen ist, wird ein neuer Beispielobjekt c im Speicher erstellt1 = ComplexNumber(1,3) Namec1dazu gebunden.
Befehl del c1, wird diese Bindung gelöscht und der Name aus dem entsprechenden Namensraum entferntc1Aber der Objekt bleibt im Speicher bestehen, wenn keine anderen Namensbindungen vorhanden sind, dann wird das Objekt später automatisch zerstört.
In Python wird diese automatische Zerstörung von nicht referenzierten Objekten auch als Müllentsorgung bezeichnet.