Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python-Objekte und -Klassen

Python-Objekte und -Klassen

In diesem Tutorial lernen Sie die Kernfunktionalität von Python-Objekten und -Klassen kennen. Sie lernen, was eine Klasse ist, wie man sie erstellt und in Ihrem Programm verwendet.

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, legt die objektorientierte Programmierung den Schwerpunkt auf Objekte.

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 eine Klasse als Skizze (Prototyp) eines Hauses vorstellen. Es enthält alle Details zu Böden, Türen, Fenstern usw. Auf der Grundlage dieser Beschreibungen bauen wir das Haus. Haus ist das Objekt.

Da viele Häuser aus dem Bauplan eines Hauses hergestellt werden können, können wir viele Objekte aus einer Klasse erstellen. Ein Objekt wird auch als Instanz einer Klasse bezeichnet und der Prozess der Erstellung 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 class-Schlüsselwort.

Der erste String innerhalb der Klasse heißt docstring und enthält eine kurze Beschreibung der Klasse. Dies ist zwar nicht obligatorisch, wird aber 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 Namensraum, in dem alle ihre Attribute definiert sind. Attribute können Daten oder Funktionen sein.

Es gibt auch spezielle Attribute darin, die mit doppelten Unterstrichen __ beginnen . Beispiel:__doc__ gibt uns den Docstring dieser Klasse.

Sobald wir eine Klasse definieren, wird ein neues Klassenobjekt mit demselben Namen erstellt. Dieses Klassenobjekt ermöglicht uns den Zugriff auf die verschiedenen Attribute sowie die Instanziierung neuer Objekte dieser Klasse.

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# Output: 10
print(Person.age)

# Output: <function Person.greet>
print(Person.greet)

# Output: "This is a person class"
print(Person.__doc__)

Ausgabe

10
<function Person.greet at 0x7fc78c6e8160>
This is a person class

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. Das Verfahren zum Erstellen eines Objekts ähnelt einem Funktionsaufruf.

>>> harry = Person()

Dadurch wird eine neue Objektinstanz namens harry erstellt . Wir können auf die Attribute von Objekten zugreifen, indem wir das Präfix des Objektnamens verwenden.

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

Das heißt seit Person.greet ist ein Funktionsobjekt (Attribut der Klasse), Person.greet wird ein Methodenobjekt sein.

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# create a new object of Person class
harry = Person()

# Output: <function Person.greet>
print(Person.greet)

# Output: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)

# Calling object's greet() method
# Output: Hello
harry.greet()

Ausgabe

<function Person.greet at 0x7fd288e4e160>
<bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>>
Hello

Vielleicht ist Ihnen die self aufgefallen Parameter in der Funktionsdefinition innerhalb der Klasse, aber wir haben die Methode einfach als harry.greet() bezeichnet ohne Argumente. Es hat trotzdem 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 der Aufruf einer Methode mit einer Liste von n Argumenten dem Aufruf der entsprechenden Funktion mit einer Argumentliste, die erstellt wird, indem das Objekt der Methode vor dem ersten Argument eingefügt wird.

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

Jetzt müssen Sie mit Klassenobjekt, Instanzobjekt, Funktionsobjekt, Methodenobjekt und ihren Unterschieden vertraut sein.


Konstruktoren in Python

Klassenfunktionen, die mit doppeltem Unterstrich __ beginnen werden Sonderfunktionen genannt, da sie eine besondere Bedeutung haben.

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

Diese Art von Funktionen wird in der objektorientierten Programmierung (OOP) auch als Konstruktoren bezeichnet. Wir verwenden es normalerweise, um alle Variablen zu initialisieren.

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)

Ausgabe

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

Im obigen Beispiel haben wir eine neue Klasse definiert, um komplexe Zahlen darzustellen. Es hat zwei Funktionen, __init__() um die Variablen zu initialisieren (standardmäßig null) und get_data() um die Nummer richtig anzuzeigen.

Eine interessante Sache, die im obigen Schritt zu beachten ist, ist, dass Attribute eines Objekts im laufenden Betrieb erstellt werden können. Wir haben ein neues Attribut attr erstellt für Objekt num2 und auch lesen. Aber das erzeugt dieses Attribut nicht für das Objekt num1 .


Attribute und Objekte löschen

Jedes Attribut eines Objekts kann jederzeit mit dem del gelöscht werden Aussage. 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'

Mit der del-Anweisung können wir sogar das Objekt selbst löschen.

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

Eigentlich ist es komplizierter als das. Wenn wir c1 = ComplexNumber(1,3) machen , wird ein neues Instanzobjekt im Speicher erstellt und der Name c1 bindet damit.

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

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


Python

  1. C#-Klasse und -Objekt
  2. Abstrakte C#-Klasse und -Methode
  3. C# Teilklasse und Teilmethode
  4. Versiegelte C#-Klasse und -Methode
  5. C++-Klassen und -Objekte
  6. C++ Friend-Funktion und Friend-Klassen
  7. Python-Schlüsselwörter und -Identifikatoren
  8. Python-Anweisung, Einrückung und Kommentare
  9. Python-Verzeichnis- und Dateiverwaltung
  10. Benutzerdefinierte Python-Ausnahmen