Python Data Classes: databeheer stroomlijnen met moderne syntax

Een Python data class is een gewone Python-klasse die de @dataclass decorator heeft. Het is specifiek gemaakt om data te houden. Sinds Python-versie 3.7 biedt Python data classes via een ingebouwde module genaamd dataclass. Er zijn verschillende voordelen ten opzichte van gewone Python-klassen die we in dit artikel zullen verkennen. We zullen ook voorbeeldcode en een paar veelvoorkomende operaties bekijken die u misschien met data classes wilt uitvoeren.
Het voordeel van het gebruik van data classes
Waarom zou u een data class gebruiken in plaats van een gewone Python-klasse? Laten we eerst kijken naar enkele van de voordelen die een Python data class te bieden heeft.
Vereist een minimaal aantal code
De @dataclass decorator voegt veel functionaliteit toe aan een klasse zonder zichtbare code toe te voegen. Hierdoor kan uw data class erg compact zijn terwijl het nog steeds veel nuttige features biedt. Alles wat u hoeft te doen is de velden definiëren die uw data gaan houden. U hoeft geen functies te definiëren.
Vergelijking
Twee Python data classes kunnen met == vergeleken worden, omdat de zogenaamde dunder-methode __eq__ automatisch geïmplementeerd is. In het algemeen kunnen we elk Python-object dat deze speciale methode implementeert, vergelijken met andere objecten van hetzelfde type.
Een data class printen
Op dezelfde manier, omdat __repr__ geïmplementeerd is, kunt u data classes printen en een leuke representatie ervan krijgen. Dit is met name handig voor debuggen.
Data classes vereisen type hints
Data classes zijn gebouwd rond het nieuwe(ish) typesysteem dat Python biedt. Het gebruik van type hints verlaagt de kans op bugs en onverwacht gedrag in uw code. U declareert essentieel het type data dat in een variabele moet worden opgeslagen.
Python data class voorbeeld
Hier is een voorbeeld van een data class aan het werk:
from dataclasses import dataclass
@dataclass
class Card:
rank: str
suit: str
card1 = Card("Q", "hearts")
card2 = Card("Q", "hearts")
print(card1 == card2) # True
print(card1.rank) # 'Q'
print(card1)
Card(rank='Q', suit='hearts')
Standaardwaarden
Een data class kan standaardwaarden hebben. Het toewijzen van standaardwaarden is zo simpel als het toewijzen van een waarde aan een variabele. Bijvoorbeeld, om onze Card-klasse een standaardwaarde van Queen of hearts te geven, kunnen we als volgt doen:
from dataclasses import dataclass
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
Een data class naar JSON converteren
Een veelvoorkomend gebruik is het converteren van uw netjes gestructureerde data class naar JSON. Bijv., als u de data wilt exporteren naar een database, of naar de browser wilt sturen. Het slechte nieuws: er is geen ingebouwde manier om een data class naar JSON te converteren.
Het goede nieuws is, er is een Python-pakket genaamd dataclasses-json dat de taak vereenvoudigt. Het vereist echter een extra decorator. U moet het pakket installeren met het pip install-commando of iets als Pipenv, bij voorkeur binnen een virtuele omgeving. Bijvoorbeeld:
$ pip install dataclasses-json
Hier is een voorbeeld van hoe u het pakket kunt gebruiken:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
card = Card()
print(card.to_json())
{"rank": "Q", "suit": "hearts"}
Een andere methode is om Python-erfenis te gebruiken en over te erven van de JSONEncoder-klasse om uw eigen custom encoder te maken. Het voordeel hier is dat u geen extern pakket hoeft te installeren. U kunt leren hoe u dit doet in deze blogpost.
Blijven leren
- Het Python attrs-pakket heeft een geavanceerde versie van de ingebouwde Python data class
- De officiële documentatie op Python.org
- Hoe u meerdere waarden in Python kunt retourneren
Python
- Datacenter-consolidatie: Kosten Snijden, Beveiliging Verbeteren, Efficiëntie Boost
- Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding
- Data Encapsulatie in C++: Uw Code Beschermen
- Python Datatypes onder de knie krijgen: Een praktische gids
- Python Type Conversie & Casting onder de knie krijgen: Een uitgebreide gids
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python-custom exceptions: een praktische gids
- Python Object-Oriented Programming beheersen: classes, inheritance, encapsulatie & polymorfisme
- Python-erfelijkheid beheersen: concepten, syntax en praktische voorbeelden
- type() en isinstance() in Python begrijpen: praktische voorbeelden
- Java Data Structures: Kernklassen & Collections Framework Verkend