Strukturen in Python

Vaibhav Vaibhav 10 Oktober 2023
Strukturen in Python

Python ist eine objektorientierte Programmiersprache, was bedeutet, dass es Klassen und Objekte hat. Während C keine objektorientierte Programmiersprache ist, kann man mit ihr nur funktionale Programmierung durchführen. Aber C enthält Strukturen, bei denen es sich um einen benutzerdefinierten Datentyp handelt.

Wir haben keine Strukturen in Python, aber wir können sie implementieren oder ihr Verhalten mit anderen Objekten darstellen, nämlich Datenklassen. Eine Datenklasse ist eine Klasse, die nur Felder und CRUD-Methoden (Getter und Setter) enthält, um diese Felder zu manipulieren. Das Hauptziel dieser Klassen besteht darin, Daten zu speichern oder einige Daten in Form eines Pakets darzustellen. Eine Datenklasse stellt Entitäten dar, und da Entitäten mehrere Parameter oder Eigenschaften haben, machen es Datenklassen einfacher, alles unter einem einzigen Objekt zu verpacken.

In diesem Artikel erfahren Sie, wie Sie Datenklassen in Python verwenden.

Datenklasse in Python

Python 3.7 führte Datenklassen ein. Obwohl Datenklassen mit primitiven Python-Klassen implementiert werden können, implementiert eine Datenklasse die meisten der erforderlichen Funktionen im Hintergrund, wodurch der Python-Code für eine Datenklasse kürzer und lesbarer wird. Die Implementierung mit primitiven Python-Klassen ermöglicht mehr Kontrolle, aber bei größeren Datenklassen kann die Implementierung chaotisch und massiv werden, was sie unüberschaubar macht.

Python hat einen Dekorator dataclass, der im Modul dataclasses definiert ist. Dieser Dekorator fügt automatisch spezielle Methoden hinzu, die innerhalb einer Datenklasse erforderlich sind, wie zum Beispiel __init__(), __repr__() usw.

Hier ist ein Beispiel.

from dataclasses import dataclass


@dataclass
class Item:
    name: str
    price: float
    quantity: int

    def total_cost(self) -> float:
        return self.price * self.quantity

Wie oben erwähnt, fügt der Dekorator @dataclass spezielle Methoden automatisch hinzu. Dies bedeutet, dass die folgende Methode __init__() automatisch hinzugefügt wird.

def __init__(self, name: str, price: float, quantity: int = 0):
    self.name = name
    self.price = price
    self.quantity = quantity

Weiterhin können aus dieser Datenklasse Objekte vom Typ Item erzeugt werden, die wie normale Klassenobjekte behandelt werden können.

from dataclasses import dataclass


@dataclass
class Item:
    name: str
    price: float
    quantity: int

    def total_cost(self):
        return self.price * self.quantity


a = Item("Chocolate", 25, 100)
b = Item("Chips", 35, 150)
c = Item("Cookie", 10, 50)
print(a)
print(b)
print(c)
print(a.total_cost())
print(b.total_cost())
print(c.total_cost())

Der Dekorator dataclass hat einige Parameter, nämlich

  • init - True standardmäßig. Bei True wird die Methode __init__() der Datenklasse definiert.
  • repr - True standardmäßig. Bei True wird die Methode __repr__() der Datenklasse definiert.
  • eq - True standardmäßig. Bei True wird die Methode __eq__() der Datenklasse definiert.
  • order - False standardmäßig. Bei True werden die Methoden __lt__(), __le__(), __gt__() und __ge__() der Datenklasse definiert.
  • unsafe_hash - False standardmäßig. Bei False wird die Methode __hash__() der Datenklasse definiert.
  • frozen - False standardmäßig. Bei True werden die Datenklassenattribute eingefroren. Dies bedeutet, dass sie nach der Initialisierung nicht weiter manipuliert werden können.
  • match_args - True standardmäßig.
  • kw_only - False standardmäßig. Bei True werden alle Felder der Datenklasse als Nur-Schlüsselwort markiert.
  • slots - False standardmäßig.

Diese Parameter können konfiguriert werden, wenn ein Dekorator dataclass über einer Klassenimplementierung platziert wird. Einige Beispiele dafür sind wie folgt.

@dataclass
class A:
    pass


@dataclass(init=True, repr=True, order=True)
class B:
    pass


@dataclass(
    eq=True,
    order=False,
    unsafe_hash=True,
)
class C:
    pass

Weitere Informationen zum Modul dataclasses finden Sie in der offiziellen Dokumentation hier.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Verwandter Artikel - Python Dataclass