Sequenzmagie-Methoden

PythonPythonIntermediate
Jetzt üben

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

Einführung

In diesem Tutorial werden wir die Sequenz-Magie-Methoden in Python behandeln. Diese Methoden ermöglichen es Ihnen, das Verhalten eigener Klassen bei verschiedenen Operationen anzupassen, wie zum Beispiel das Abrufen der Länge eines Objekts, das Zugreifen auf Elemente, das Slicing und die Iteration.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/ControlFlowGroup -.-> python/for_loops("For Loops") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/AdvancedTopicsGroup -.-> python/iterators("Iterators") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/for_loops -.-> lab-7845{{"Sequenzmagie-Methoden"}} python/function_definition -.-> lab-7845{{"Sequenzmagie-Methoden"}} python/classes_objects -.-> lab-7845{{"Sequenzmagie-Methoden"}} python/iterators -.-> lab-7845{{"Sequenzmagie-Methoden"}} python/generators -.-> lab-7845{{"Sequenzmagie-Methoden"}} python/data_collections -.-> lab-7845{{"Sequenzmagie-Methoden"}} end

Länge und Enthaltensein

Länge- und Enthaltensein-Methoden sind spezielle Methoden in Python, die es Objekten ermöglichen, ihr Verhalten bei der Verwendung mit eingebauten Funktionen oder Operatoren wie len(), in und not in zu definieren.

Beginnen wir mit einem einfachen Objekt. In sequence.py erstellen Sie eine Klasse namens MySequence, die ein Attribut data hat.

class MySequence:
    def __init__(self, data: list):
        """Initialisiert ein neues MySequence-Objekt mit den angegebenen Daten."""
        self.data = data

__len__

Die __len__-Magie-Methode wird verwendet, um das Verhalten der len()-Funktion zu definieren, wenn sie auf Instanzen Ihrer Klasse angewendet wird.

    #... (vorheriger Code in sequence.py)

    def __len__(self) -> int:
        """Gibt die Länge der Sequenz zurück."""
        return len(self.data)

__contains__

Die __contains__-Magie-Methode wird verwendet, um das Verhalten der in- und not in-Operatoren zu definieren, wenn sie auf Instanzen Ihrer Klasse angewendet werden.

    #... (vorheriger Code in sequence.py)

    def __contains__(self, item: object) -> bool:
        """Prüft, ob die Sequenz das angegebene Element enthält."""
        return item in self.data

Beispiel: Verwendung der Länge- und Enthaltensein-Methoden

Jetzt, da wir die Länge- und Enthaltensein-Methoden für unsere MySequence-Klasse definiert haben, schauen wir uns an, wie sie in length_containment_example.py funktionieren:

from sequence import MySequence

## Erstellt ein MySequence-Objekt
my_seq = MySequence([1, 2, 3, 4, 5])

## Testet die __len__-Magie-Methode
print(len(my_seq))  ## Ausgabe: 5

## Testet die __contains__-Magie-Methode
print(3 in my_seq)  ## Ausgabe: True
print(3 not in my_seq)  ## Ausgabe: False
print(10 in my_seq)  ## Ausgabe: False

Dann geben Sie den folgenden Befehl in der Konsole ein, um das Skript auszuführen.

python length_containment_example.py

Elementzugriff

Elementzugriffs-Methoden sind spezielle Methoden in Python, die es Objekten ermöglichen, ihr Verhalten beim Zugriff mit eckigen Klammern [] zu definieren.

__getitem__

Die __getitem__-Magie-Methode wird verwendet, um das Verhalten der eckigen Klammern-Notation beim Zugriff auf Elemente in Instanzen Ihrer Klasse zu definieren.

    #... (vorheriger Code in sequence.py)

    def __getitem__(self, index: int) -> object:
        """Gibt das Element an der angegebenen Position zurück."""
        return self.data[index]

__setitem__

Die __setitem__-Magie-Methode wird verwendet, um das Verhalten der eckigen Klammern-Notation beim Festlegen von Elementen in Instanzen Ihrer Klasse zu definieren.

    #... (vorheriger Code in sequence.py)

    def __setitem__(self, index: int, value: object) -> None:
        """Setzt das Element an der angegebenen Position auf den angegebenen Wert."""
        self.data[index] = value

__delitem__

Die __delitem__-Magie-Methode wird verwendet, um das Verhalten des del-Schlüsselworts zu definieren, wenn es auf Instanzen Ihrer Klasse angewendet wird.

    #... (vorheriger Code in sequence.py)

    def __delitem__(self, index: int) -> None:
        """Entfernt das Element an der angegebenen Position."""
        del self.data[index]

Beispiel: Verwendung der Elementzugriffs-Methoden

Jetzt, da wir die Elementzugriffs-Methoden für unsere MySequence-Klasse definiert haben, schauen wir uns an, wie sie in item_access_example.py funktionieren:

from sequence import MySequence

## Erstellt ein MySequence-Objekt
my_seq = MySequence([1, 2, 3, 4, 5])

## Testet die __getitem__-Magie-Methode
print(my_seq[2])  ## Ausgabe: 3

## Testet die __setitem__-Magie-Methode
my_seq[2] = 9
print(my_seq[2])  ## Ausgabe: 9

## Testet die __delitem__-Magie-Methode
del my_seq[2]
print(len(my_seq))  ## Ausgabe: 4
print(my_seq.data)  ## Ausgabe: [1, 2, 4, 5]

Dann geben Sie den folgenden Befehl in der Konsole ein, um das Skript auszuführen.

python item_access_example.py

Iteration

Iterationsmethoden sind spezielle Methoden in Python, die es Objekten ermöglichen, ihr Verhalten bei der Verwendung mit Iterationsprotokollen zu definieren.

__iter__

Die __iter__-Magie-Methode wird verwendet, um das Verhalten der iter()-Funktion und der for... in...-Schleife zu definieren, wenn sie auf Instanzen Ihrer Klasse angewendet werden.

    #... (vorheriger Code in sequence.py)

    def __iter__(self):
        """Gibt einen Iterator für die Sequenz zurück."""
        for item in self.data:
            yield item

__reversed__

Die __reversed__-Magie-Methode wird verwendet, um das Verhalten der reversed()-Funktion zu definieren, wenn sie auf Instanzen Ihrer Klasse angewendet wird.

    #... (vorheriger Code in sequence.py)

    def __reversed__(self):
        """Gibt einen umgekehrten Iterator für die Sequenz zurück."""
        return reversed(self.data)

Beispiel: Verwendung der Iterationsmethoden

Jetzt, da wir die Iterationsmethoden für unsere MySequence-Klasse definiert haben, schauen wir uns an, wie sie in iteration_example.py funktionieren:

from sequence import MySequence

## Erstellt ein MySequence-Objekt
my_seq = MySequence([1, 2, 3, 4, 5])

## Testet die __iter__-Magie-Methode
for item in my_seq:
    print(item, end=" ")  ## Ausgabe: 1 2 4 5

## Testet die __reversed__-Magie-Methode
for item in reversed(my_seq):
    print(item, end=" ")  ## Ausgabe: 5 4 2 1

Dann geben Sie den folgenden Befehl in der Konsole ein, um das Skript auszuführen.

python iteration_example.py

Zusammenfassung

Mit den implementierten Magie-Methoden verhält sich unsere benutzerdefinierte MySequence-Klasse jetzt ähnlich wie eingebautes Sequenztypen wie Listen und Tupel. Sie können es jetzt verwenden, als wäre es eine native Python-Sequenz.