Einführung
In diesem Projekt lernst du, wie du in Python ein einfaches benanntes Tupel implementierst. Ein benanntes Tupel ist eine Datenstruktur, die es dir ermöglicht, auf Daten sowohl über die positionale Indizierung als auch über Attributnamen zuzugreifen, was eine intuitivere und lesbarere Möglichkeit bietet, mit strukturierten Daten umzugehen.
👀 Vorschau
## Ausgabe
🎯 Aufgaben
In diesem Projekt wirst du lernen:
- Wie du eine
NamedTuple-Klasse erstellst, die von der eingebautentuple-Klasse erbt - Wie du die Methoden
__init__,__new__,__getitem__und__repr__implementierst, um die gewünschte Funktionalität zu erreichen - Wie du auf Daten sowohl über die positionale Indizierung als auch über Attributnamen zugreifst
- Wie du die
NamedTuple-Instanz in einem lesbaren Format darstellst
🏆 Errungenschaften
Nach Abschluss dieses Projekts wirst du in der Lage sein:
- Den Begriff von benannten Tupeln und deren Vorteile zu verstehen
- Eine einfache benannte Tupel-Klasse in Python zu implementieren
- Das benannte Tupel verwenden, um strukturiertes Daten auf eine intuitivere Weise zuzugreifen und darzustellen
Implementiere die NamedTuple-Klasse
In diesem Schritt lernst du, wie du die NamedTuple-Klasse implementierst, die es dir ermöglicht, auf Daten sowohl über die positionale Indizierung als auch über Attributnamen zuzugreifen.
- Öffne die Datei
namedtuple.pyin deinem Code-Editor. - Definiere die
NamedTuple-Klasse, die von dertuple-Klasse erben sollte. - Im
__init__-Methode akzeptiere zwei Parameter:iterable(die Daten) undfields(die Namen für die Daten). - Speichere das
iterableund diefieldsals Instanzvariablenself.dataundself.fieldsrespective. - Verwende eine
for-Schleife, um über diefieldszu iterieren und jedes Feld als Attribut derNamedTuple-Instanz zu setzen, indem du den entsprechenden Wert ausself.datazuweist. - Implementiere die
__new__-Methode, um eine neue Instanz derNamedTuple-Klasse zu erstellen. Diese Methode sollte die__new__-Methode dertuple-Klasse aufrufen und die neue Instanz zurückgeben. - Implementiere die
__getitem__-Methode, um es zu ermöglichen, auf die Daten sowohl über die positionale Indizierung als auch über Attributnamen zuzugreifen. Wenn der Index ein String ist, finde den Index des entsprechenden Felds inself.fieldsund gib den Wert ausself.datazurück. - Implementiere die
__repr__-Methode, um eine Zeichenkettendarstellung derNamedTuple-Instanz im FormatNamedTuple(x=1, y=2)zurückzugeben, wobeixundydie Feldnamen sind und1und2die entsprechenden Werte.
Deine abgeschlossene NamedTuple-Klasse sollte so aussehen:
class NamedTuple(tuple):
def __init__(self, iterable, fields):
self.data = iterable
self.fields = tuple(fields)
for i, attr in enumerate(self.fields):
setattr(self, attr, self.data[i])
def __new__(cls, iterable, fields):
return super().__new__(cls, iterable)
def __getitem__(self, index):
if isinstance(index, str):
index = self.fields.index(index)
return self.data[index]
def __repr__(self):
return f"NamedTuple({', '.join(f'{field}={self[field]}' for field in self.fields)})"
Teste die NamedTuple-Klasse
In diesem Schritt wirst du die NamedTuple-Klasse testen, die du im vorherigen Schritt implementiert hast.
- In der Datei
namedtuple.pyfüge am Ende der Datei folgenden Code hinzu:
if __name__ == "__main__":
## Beispielverwendung:
testData = [1, 2]
fields = ["x", "y"]
t = NamedTuple(testData, fields)
print(t) ## Ausgabe: NamedTuple(x=1, y=2)
print(t[1]) ## Ausgabe: 2
print(t.x) ## Ausgabe: 1
- Speichere die Datei
namedtuple.py. - Öffne ein Terminal oder eine Eingabeaufforderung und navigiere zum Verzeichnis, das die Datei
namedtuple.pyenthält. - Führe den folgenden Befehl aus, um das Skript auszuführen:
python3 namedtuple.py
Du solltest die folgende Ausgabe sehen:
NamedTuple(x=1, y=2)
2
1
Dies zeigt, dass die NamedTuple-Klasse wie erwartet funktioniert und es dir ermöglicht, auf die Daten sowohl über die positionale Indizierung als auch über Attributnamen zuzugreifen.
Herzlichen Glückwunsch! Du hast erfolgreich ein einfaches benanntes Tupel in Python implementiert.
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.



