Python-Klassen und -Objekte (mit Beispielen)

In diesem Tutorial lernen Sie die Kernfunktionen von Python-Objekten und -Klassen kennen. Sie lernen, was eine Klasse ist, wie Sie sie erstellen und in Ihrem Programm verwenden.

Video: Python-Klassen und -Objekte

Python-Objekte und -Klassen

Python ist eine objektorientierte Programmiersprache. Im Gegensatz zur prozedurorientierten Programmierung, bei der der Schwerpunkt auf Funktionen liegt, werden bei der objektorientierten Programmierung Objekte betont.

Ein Objekt ist einfach eine Sammlung von Daten (Variablen) und Methoden (Funktionen), die auf diese Daten einwirken. Ebenso ist eine Klasse eine Blaupause für dieses Objekt.

Wir können uns Klasse als Skizze (Prototyp) eines Hauses vorstellen. Es enthält alle Details zu den Böden, Türen, Fenstern usw. Basierend auf diesen Beschreibungen bauen wir das Haus. Haus ist das Objekt.

Da viele Häuser aus der Blaupause eines Hauses erstellt werden können, können wir viele Objekte aus einer Klasse erstellen. Ein Objekt wird auch als Instanz einer Klasse bezeichnet, und der Prozess zum Erstellen dieses Objekts wird als Instanziierung bezeichnet .

Definieren einer Klasse in Python

So wie Funktionsdefinitionen in Python mit dem Schlüsselwort def beginnen, beginnen Klassendefinitionen mit einem Schlüsselwort class.

Die erste Zeichenfolge in der Klasse heißt docstring und enthält eine kurze Beschreibung der Klasse. Obwohl nicht obligatorisch, wird dies dringend empfohlen.

Hier ist eine einfache Klassendefinition.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Eine Klasse erstellt einen neuen lokalen Namespace, in dem alle Attribute definiert sind. Attribute können Daten oder Funktionen sein.

Es gibt auch spezielle Attribute, die mit doppelten Unterstrichen beginnen __. __doc__Gibt uns zum Beispiel die Dokumentzeichenfolge dieser Klasse.

Sobald wir eine Klasse definieren, wird ein neues Klassenobjekt mit demselben Namen erstellt. Mit diesem Klassenobjekt können wir auf die verschiedenen Attribute zugreifen und neue Objekte dieser Klasse instanziieren.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Ausgabe

 10 Dies ist eine Personenklasse

Erstellen eines Objekts in Python

Wir haben gesehen, dass das Klassenobjekt verwendet werden kann, um auf verschiedene Attribute zuzugreifen.

Es kann auch verwendet werden, um neue Objektinstanzen (Instanziierung) dieser Klasse zu erstellen. Die Vorgehensweise zum Erstellen eines Objekts ähnelt einem Funktionsaufruf.

 >>> harry = Person()

Dadurch wird eine neue Objektinstanz mit dem Namen harry erstellt. Wir können auf die Attribute von Objekten mit dem Objektnamenpräfix zugreifen.

Attribute können Daten oder Methoden sein. Methoden eines Objekts sind entsprechende Funktionen dieser Klasse.

Das heißt, da Person.greetes sich um ein Funktionsobjekt (Attribut der Klasse) handelt, handelt Person.greetes sich um ein Methodenobjekt.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Ausgabe

  Hallo 

Möglicherweise haben Sie den selfParameter in der Funktionsdefinition innerhalb der Klasse bemerkt, aber wir haben die Methode einfach wie harry.greet()ohne Argumente aufgerufen . Es hat immer noch funktioniert.

Dies liegt daran, dass jedes Mal, wenn ein Objekt seine Methode aufruft, das Objekt selbst als erstes Argument übergeben wird. Also harry.greet()übersetzt in Person.greet(harry).

Im Allgemeinen entspricht das Aufrufen einer Methode mit einer Liste von n Argumenten dem Aufrufen der entsprechenden Funktion mit einer Argumentliste, die durch Einfügen des Objekts der Methode vor dem ersten Argument erstellt wird.

Aus diesen Gründen muss das erste Argument der Funktion in der Klasse das Objekt selbst sein. Dies wird üblicherweise Selbst genannt. Es kann anders benannt werden, aber wir empfehlen dringend, die Konvention zu befolgen.

Jetzt müssen Sie mit Klassenobjekten, Instanzobjekten, Funktionsobjekten, Methodenobjekten und deren Unterschieden vertraut sein.

Konstruktoren in Python

Klassenfunktionen, die mit einem doppelten Unterstrich beginnen, __werden als Sonderfunktionen bezeichnet, da sie eine besondere Bedeutung haben.

Von besonderem Interesse ist die __init__()Funktion. Diese spezielle Funktion wird immer dann aufgerufen, wenn ein neues Objekt dieser Klasse instanziiert wird.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Jedes Attribut eines Objekts kann mithilfe der delAnweisung jederzeit gelöscht werden . Versuchen Sie Folgendes in der Python-Shell, um die Ausgabe anzuzeigen.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Wir können sogar das Objekt selbst mit der del-Anweisung löschen.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

Eigentlich ist es komplizierter. Wenn wir dies tun c1 = ComplexNumber(1,3), wird ein neues Instanzobjekt im Speicher erstellt und der Name c1 wird daran gebunden.

Im Befehl del c1wird diese Bindung entfernt und der Name c1 aus dem entsprechenden Namespace gelöscht. Das Objekt bleibt jedoch weiterhin im Speicher vorhanden, und wenn kein anderer Name daran gebunden ist, wird es später automatisch zerstört.

Diese automatische Zerstörung nicht referenzierter Objekte in Python wird auch als Garbage Collection bezeichnet.

Durch das Löschen von Objekten in Python wird die Namensbindung entfernt

Interessante Beiträge...