Heim >Backend-Entwicklung >Python-Tutorial >Wie werden Datenklassen in Python verwendet?
Python3.7 hat die Datenklasse eingeführt. Der Datenklassendekorator kann eine Python-Klasse als Datenklasse deklarieren; eine Datenklasse ist zum Speichern von Daten geeignet:
Eine Datenklasse repräsentiert einen bestimmten Datentyp und ein Datenobjekt repräsentiert einen spezifischer Entitätstyp, einschließlich der Attribute der Entität.
Objekte des gleichen Typs können verglichen werden, zum Beispiel größer als, kleiner als oder gleich.
Im Wesentlichen gibt es an Datenklassen nichts Besonderes. Der @dataclass-Dekorator generiert lediglich automatisch eine Reihe von Methoden wie __repr__, init, __eq__ usw. Definieren Sie die Datenklasse:
from dataclasses import dataclass @dataclass class A: normal: str defVal: int = 0
Die vollständige Form der Datenklasse lautet (True dient zum Generieren der entsprechenden Methode, False generiert sie nicht; wenn die entsprechende Methode in der Klasse definiert wurde, wird dieser Parameter ignoriert):
@dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, Frozen=False):
init: Die __init__-Methode wird standardmäßig generiert;
repr: Die __repr__-Methode wird standardmäßig generiert. Die Zeichenfolge enthält den Klassennamen, jeden Feldnamen und seinen Repr (in der in seiner Klasse definierten Reihenfolge). wird übergeben, die Methode __eq__ wird nicht zur Datenklasse hinzugefügt, sondern erbt das Objekt.__eq__ (vergleiche ID);
Reihenfolge: __gt__, __ge__, __lt__, __le__ Methoden werden standardmäßig nicht generiert;
unsafe_hash : Wenn es False ist (Standard), basiert es auf eq und eingefrorenen Einstellungen generiert die __hash__()-Methode (verwendet vom integrierten hash()).
Wenn eq wahr und Frozen falsch ist, wird __hash__() auf „Keine“ gesetzt und als markiert gesetzt nicht hashbar (was es ist, da es veränderlich ist);
Wenn eq falsch ist, bleibt __hash__() unverändert, was bedeutet, dass die __hash__()-Methode der Oberklasse verwendet wird (Wenn die Oberklasse ein Objekt ist, wird auf id zurückgegriffen -basiertes Hashing).
default: Falls angegeben, ist dies der Standardwert für dieses Feld.
from dataclasses import dataclass, field import random def build_marks() -> list: return [random.randint(0, 1000) for i in range(5)] @dataclass(order=True) class RandMark: marks: list = field(default_factory=build_marks) r = RandMark() # 使用build_marks生成默认值 print(r)
Mit Compare=False können Sie Felder festlegen, die nicht vorhanden sind Zum Vergleich verwendet:
@dataclass(order=True) class Student: name: str = field(compare=False) score: float s = [Student("mike", 90), Student("steven", 80), Student("orange", 70) ] print(sorted(s)) # 只根据score排序
Die Nachbearbeitung kann über __post_init__ erfolgen (wird automatisch aufgerufen, bevor __init__ zurückkehrt):
from dataclasses import dataclass @dataclass class FloatNumber: val: float decimal: float = 0 integer: float = 0 def __post_init__(self): self.decimal, self.integer = math.modf(self.val) f = FloatNumber(1.2) # decimal与integer自动赋值
fields(class_or_instance ): Tupel von Feldobjekten zurückgeben;
Das obige ist der detaillierte Inhalt vonWie werden Datenklassen in Python verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!