Einführung
In diesem Lab lernen Sie, wie Sie in Python prüfen können, ob ein Objekt eine bestimmte Methode hat. Das Lab behandelt Objektmethoden und konzentriert sich darauf, wie sie Verhalten innerhalb von Objekten kapseln, um organisierter und wiederverwendbarer Code zu schreiben.
Sie werden die Dog-Klasse mit Methoden wie __init__, bark und get_name untersuchen, Instanzen erstellen und diese Methoden aufrufen. Anschließend führt das Lab Sie durch die Verwendung von hasattr() und callable(), um festzustellen, ob ein Objekt eine bestimmte Methode besitzt. Abschließend werden Sie die Methodenauflösungsreihenfolge (Method Resolution Order, MRO) verstehen.
Lernen Sie über Objektmethoden
In diesem Schritt lernen Sie über Objektmethoden in Python. Methoden sind Funktionen, die mit Objekten verknüpft sind. Sie werden verwendet, um Operationen auf den Daten eines Objekts auszuführen. Das Verständnis von Objektmethoden ist entscheidend für die Arbeit mit Objekten und Klassen in Python.
Beginnen wir damit, eine einfache Klasse namens Dog zu erstellen:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
return "Woof!"
def get_name(self):
return self.name
Erstellen Sie mit dem VS Code-Editor eine Datei namens dog.py in Ihrem ~/project-Verzeichnis. Kopieren Sie den obigen Code und fügen Sie ihn in die dog.py-Datei ein.
Diese Klasse hat drei Methoden:
__init__: Dies ist die Konstruktormethode. Sie wird aufgerufen, wenn ein neues Objekt der Klasse erstellt wird. Sie initialisiert die Attribute des Objekts.bark: Diese Methode gibt die Zeichenkette "Woof!" zurück.get_name: Diese Methode gibt den Namen des Hundes zurück.
Jetzt erstellen wir ein Objekt der Dog-Klasse und rufen seine Methoden auf. Erstellen Sie eine neue Datei namens main.py im ~/project-Verzeichnis:
from dog import Dog
my_dog = Dog("Buddy", "Golden Retriever")
print(my_dog.bark())
print(my_dog.get_name())
Speichern Sie die main.py-Datei.
Um das main.py-Skript auszuführen, öffnen Sie Ihr Terminal und navigieren Sie zum ~/project-Verzeichnis:
cd ~/project
Führen Sie dann das Skript mit dem python-Befehl aus:
python main.py
Sie sollten die folgende Ausgabe sehen:
Woof!
Buddy
In diesem Beispiel ist my_dog ein Objekt der Dog-Klasse. Wir rufen die bark- und get_name-Methoden auf dem my_dog-Objekt mit der Punktnotation (.) auf.
Objektmethoden ermöglichen es Ihnen, Verhalten innerhalb von Objekten zu kapseln, wodurch Ihr Code organisierter und wiederverwendbarer wird. Sie sind ein grundlegender Bestandteil der objektorientierten Programmierung in Python.
Prüfen mit hasattr() und callable()
In diesem Schritt lernen Sie, wie Sie die Funktionen hasattr() und callable() in Python verwenden. Diese Funktionen sind nützlich, um Objekte zu untersuchen und festzustellen, ob sie bestimmte Attribute oder Methoden haben.
hasattr(object, attribute_name): Diese Funktion prüft, ob ein Objekt ein bestimmtes Attribut hat. Sie gibtTruezurück, wenn das Attribut existiert, undFalsesonst.callable(object): Diese Funktion prüft, ob ein Objekt aufrufbar ist (d.h., es kann wie eine Funktion aufgerufen werden). Sie gibtTruezurück, wenn das Objekt aufrufbar ist, undFalsesonst.
Setzen wir mit der Dog-Klasse aus dem vorherigen Schritt fort. Öffnen Sie die Datei dog.py in Ihrem ~/project-Verzeichnis mit dem VS Code-Editor. Der Inhalt sollte wie folgt aussehen:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
return "Woof!"
def get_name(self):
return self.name
Jetzt erstellen wir eine neue Datei namens check_methods.py im ~/project-Verzeichnis, um die Verwendung von hasattr() und callable() zu demonstrieren:
from dog import Dog
my_dog = Dog("Buddy", "Golden Retriever")
print(hasattr(my_dog, "name"))
print(hasattr(my_dog, "bark"))
print(hasattr(my_dog, "age"))
print(callable(my_dog.bark))
print(callable(my_dog.name))
Speichern Sie die Datei check_methods.py.
In diesem Beispiel:
hasattr(my_dog, "name")prüft, ob dasmy_dog-Objekt ein Attribut namens"name"hat. Es wirdTruezurückgeben, weil dieDog-Klasse einname-Attribut hat.hasattr(my_dog, "bark")prüft, ob dasmy_dog-Objekt ein Attribut namens"bark"hat. Es wirdTruezurückgeben, weil dieDog-Klasse einebark-Methode hat.hasattr(my_dog, "age")prüft, ob dasmy_dog-Objekt ein Attribut namens"age"hat. Es wirdFalsezurückgeben, weil dieDog-Klasse keinage-Attribut hat.callable(my_dog.bark)prüft, ob dasmy_dog.bark-Attribut aufrufbar ist (d.h., es ist eine Methode). Es wirdTruezurückgeben, weilbarkeine Methode ist.callable(my_dog.name)prüft, ob dasmy_dog.name-Attribut aufrufbar ist. Es wirdFalsezurückgeben, weilnameein String-Attribut und keine Methode ist.
Um das Skript check_methods.py auszuführen, öffnen Sie Ihr Terminal und navigieren Sie zum ~/project-Verzeichnis:
cd ~/project
Führen Sie dann das Skript mit dem python-Befehl aus:
python check_methods.py
Sie sollten die folgende Ausgabe sehen:
True
True
False
True
False
Diese Funktionen sind nützlich, um robusteren und flexibleren Code zu schreiben, der verschiedene Objekt- und Attributtypen verarbeiten kann.
Verstehen Sie die Methodenauflösungsreihenfolge (MRO)
In diesem Schritt lernen Sie die Methodenauflösungsreihenfolge (Method Resolution Order, MRO) in Python kennen. Die MRO ist die Reihenfolge, in der Python nach einer Methode in einer Klassenhierarchie sucht. Sie ist besonders wichtig, wenn es um Mehrfachvererbung geht.
Erstellen wir eine neue Reihe von Klassen, um die MRO zu veranschaulichen. Erstellen Sie mit dem VS Code-Editor eine Datei namens animal.py in Ihrem ~/project-Verzeichnis:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Generic animal sound"
class Mammal(Animal):
def speak(self):
return "Generic mammal sound"
class Dog(Mammal):
def speak(self):
return "Woof!"
class Cat(Mammal):
def speak(self):
return "Meow!"
Speichern Sie die Datei animal.py.
Jetzt erstellen wir eine neue Datei namens mro_example.py im ~/project-Verzeichnis, um die MRO zu demonstrieren:
from animal import Animal, Mammal, Dog, Cat
my_dog = Dog("Buddy")
my_cat = Cat("Whiskers")
print(my_dog.speak())
print(my_cat.speak())
Speichern Sie die Datei mro_example.py.
In diesem Beispiel:
Animalist die Basisklasse mit einerspeak-Methode.Mammalerbt vonAnimalund überschreibt diespeak-Methode.Dogerbt vonMammalund überschreibt diespeak-Methode.Caterbt vonMammalund überschreibt diespeak-Methode.
Wenn Sie my_dog.speak() aufrufen, sucht Python zunächst nach der speak-Methode in der Dog-Klasse. Wenn es sie dort nicht findet, sucht es in der Mammal-Klasse und dann in der Animal-Klasse. Diese Reihenfolge wird durch die MRO festgelegt.
Um das Skript mro_example.py auszuführen, öffnen Sie Ihr Terminal und navigieren Sie zum ~/project-Verzeichnis:
cd ~/project
Führen Sie dann das Skript mit dem python-Befehl aus:
python mro_example.py
Sie sollten die folgende Ausgabe sehen:
Woof!
Meow!
Jetzt betrachten wir ein komplexeres Beispiel mit Mehrfachvererbung. Erstellen Sie eine neue Datei namens mro_complex.py im ~/project-Verzeichnis:
class A:
def method(self):
return "A"
class B(A):
def method(self):
return "B"
class C(A):
def method(self):
return "C"
class D(B, C):
pass
d = D()
print(d.method())
print(D.mro())
Speichern Sie die Datei mro_complex.py.
In diesem Beispiel:
- Die Klasse
Derbt sowohl vonBals auch vonC. - Sowohl
Bals auchCerben vonA. - Die
methodist in allen drei KlassenA,BundCdefiniert.
Um das Skript mro_complex.py auszuführen, öffnen Sie Ihr Terminal und navigieren Sie zum ~/project-Verzeichnis:
cd ~/project
Führen Sie dann das Skript mit dem python-Befehl aus:
python mro_complex.py
Sie sollten die folgende Ausgabe sehen:
B
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
Die Ausgabe B zeigt an, dass die method aus der Klasse B aufgerufen wird. Die Methode D.mro() gibt ein Tupel zurück, das die Methodenauflösungsreihenfolge für die Klasse D darstellt. In diesem Fall ist die MRO D -> B -> C -> A -> object. Das bedeutet, dass wenn Sie d.method() aufrufen, Python zunächst nach der Methode in der Klasse D sucht, dann in der Klasse B, dann in der Klasse C, dann in der Klasse A und schließlich in der Basisklasse object.
Das Verständnis der MRO ist unerlässlich, um das Verhalten Ihres Codes bei der Verwendung von Vererbung, insbesondere Mehrfachvererbung, vorherzusagen.
Zusammenfassung
In diesem Labo (Lab) konzentriert sich der erste Schritt auf das Verständnis von Objektmethoden in Python. Es wird das Konzept von Methoden als Funktionen eingeführt, die mit Objekten verknüpft sind und für die Ausführung von Operationen auf Objektdaten von entscheidender Bedeutung sind. Es wird eine Dog-Klasse erstellt, die Methoden wie __init__, bark und get_name enthält, um zu zeigen, wie Methoden Verhalten innerhalb von Objekten kapseln.
Anschließend werden Sie durch den Prozess geführt, wie Sie eine Instanz der Dog-Klasse erstellen und ihre Methoden mit der Punktnotation aufrufen. Dies veranschaulicht, wie Objektmethoden in der objektorientierten Programmierung zu organisiertem und wiederverwendbarem Code beitragen.



