Wie man prüft, ob ein Objekt in Python eine bestimmte Methode hat

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/constructor("Constructor") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") subgraph Lab Skills python/function_definition -.-> lab-559612{{"Wie man prüft, ob ein Objekt in Python eine bestimmte Methode hat"}} python/build_in_functions -.-> lab-559612{{"Wie man prüft, ob ein Objekt in Python eine bestimmte Methode hat"}} python/classes_objects -.-> lab-559612{{"Wie man prüft, ob ein Objekt in Python eine bestimmte Methode hat"}} python/constructor -.-> lab-559612{{"Wie man prüft, ob ein Objekt in Python eine bestimmte Methode hat"}} python/inheritance -.-> lab-559612{{"Wie man prüft, ob ein Objekt in Python eine bestimmte Methode hat"}} end

Über Objektmethoden lernen

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üfung 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 gibt True zurück, wenn das Attribut existiert, und False sonst.
  • callable(object): Diese Funktion prüft, ob ein Objekt aufrufbar ist (d.h., es kann wie eine Funktion aufgerufen werden). Sie gibt True zurück, wenn das Objekt aufrufbar ist, und False sonst.

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 das my_dog-Objekt ein Attribut namens "name" hat. Es wird True zurückgeben, weil die Dog-Klasse ein name-Attribut hat.
  • hasattr(my_dog, "bark") prüft, ob das my_dog-Objekt ein Attribut namens "bark" hat. Es wird True zurückgeben, weil die Dog-Klasse eine bark-Methode hat.
  • hasattr(my_dog, "age") prüft, ob das my_dog-Objekt ein Attribut namens "age" hat. Es wird False zurückgeben, weil die Dog-Klasse kein age-Attribut hat.
  • callable(my_dog.bark) prüft, ob das my_dog.bark-Attribut aufrufbar ist (d.h., es ist eine Methode). Es wird True zurückgeben, weil bark eine Methode ist.
  • callable(my_dog.name) prüft, ob das my_dog.name-Attribut aufrufbar ist. Es wird False zurückgeben, weil name ein 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.

Verständnis der Methodenauflösungsreihenfolge (Method Resolution Order, 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:

  • Animal ist die Basisklasse mit einer speak-Methode.
  • Mammal erbt von Animal und überschreibt die speak-Methode.
  • Dog erbt von Mammal und überschreibt die speak-Methode.
  • Cat erbt von Mammal und überschreibt die speak-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 D erbt sowohl von B als auch von C.
  • Sowohl B als auch C erben von A.
  • Die method ist in allen drei Klassen A, B und C definiert.

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.