Comment utiliser les classes de données en python

Comment utiliser les classes de données en python
Cet article couvrira un guide sur l'utilisation des nouveaux objets «Dataclass» inclus dans Python 3.7 et versions plus récentes. Les classes de données sont comme les autres classes Python, mais elles sont spécialement conçues pour être utilisées comme conteneurs de données et fournissent une syntaxe plus propre et plus courte pour créer rapidement des objets de données. Si vous connaissez des objets «NamedTuple» et les avez utilisés dans Python, vous pouvez les définir comme des objets de type NamedTuple mutables. Vous pouvez créer de nouvelles instances de classes de données comme n'importe quelle autre classe ou des objets de type NamedTuple et accéder à leurs attributs en utilisant la notation de points.

Syntaxe et utilisation de base

Pour comprendre une classe de données et sa syntaxe, vous devez d'abord comprendre la disposition et la structure de base d'une classe Python. Vous trouverez ci-dessous un exemple montrant une simple classe Python:

Classe Stockinhand:
Def __init __ (soi, pommes, oranges, mangues):
soi.pommes = pommes
soi.oranges = oranges
soi.mangues = mangues
stock = stockage (40, 50, 60)
imprimer (stock.pommes, stock.oranges, stock.mangues)

Dans l'échantillon de code ci-dessus, une nouvelle classe appelée «Stockinhand» a été créée avec une méthode «__init__» définie à l'intérieur. La méthode __init__ est automatiquement invoquée chaque fois que vous créez une nouvelle instance de la classe de stockage. Dans ce cas, la méthode __init__ a été définie avec certains arguments obligatoires. Ainsi, vous ne pouvez pas créer une nouvelle instance de stockage sans certaines valeurs pour les arguments nécessaires. L'argument «auto» fournit une référence à l'instance d'une classe, vous pouvez donc l'utiliser pour vous référer à toute variable ou méthode au sein d'une classe tant que ces variables et méthodes ont été définies en utilisant l'argument de soi. L'argument d'auto agit comme un outil de commodité et il peut être nommé n'importe quoi. Vous pouvez également l'omettre complètement. Dans les deux dernières déclarations, une nouvelle instance de classe de stockage est créée et ses variables sont accessibles en utilisant la notation de points.

Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

40 50 60

La même classe peut être définie à l'aide de DataClass comme suit:

à partir des classes de données importent la classe de données
@dataclass
Classe Stockinhand:
pommes: int
oranges: int
mangues: int
stock = stockage (40, 50, 60)
imprimer (stock.pommes, stock.oranges, stock.mangues)

La première instruction importe le décorateur «Dataclass» du module «DataClasses». Les décorateurs peuvent être utilisés pour modifier le comportement des objets Python sans les changer réellement. Dans ce cas, le décorateur de la fermeture de données est prédéfini et provient du module DataClasses. Pour définir une fermeture de données, vous devez joindre le décorateur de la classe de données en utilisant le symbole «@» à une classe Python, comme indiqué dans l'échantillon de code ci-dessus. Dans les instructions suivantes, les variables dans la classe de données sont définies à l'aide de types de types pour indiquer quel type d'objet ils sont. Des indices de type ont été introduits dans Python 3.6 Et ils sont définis en utilisant des symboles «:» (Colon). Vous pouvez créer une nouvelle instance de la classe de données comme n'importe quelle autre classe Python. Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

40 50 60

Notez que si une méthode dans DataClass renvoie une valeur, vous pouvez lui attribuer un indice de type en utilisant le symbole "->". Voici un exemple:

à partir des classes de données importent la classe de données
@dataclass
Classe Stockinhand:
pommes: int
oranges: int
mangues: int
def total_stock (self) -> int:
se retourner.pommes + soi.oranges + soi.mangues
stock = stockage (40, 50, 60)
imprimer (stock.total_stock ())

Une nouvelle méthode appelée «Total_stock» a été créée et un indice de type utilisant le mot-clé «int» a été attribué pour indiquer le type de valeur de retour. Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

150

Les variables dans les objets de la fermeture de données peuvent avoir des valeurs par défaut

Vous pouvez attribuer des valeurs par défaut aux membres des classes de données après des conseils de type. Voici un exemple:

à partir des classes de données importent la classe de données
@dataclass
Classe Stockinhand:
pommes: int = 40
oranges: int = 50
mangues: int = 60
def total_stock (self) -> int:
se retourner.pommes + soi.oranges + soi.mangues
stock = stockinhand ()
imprimer (stock.total_stock ())

Dans la deuxième dernière déclaration, aucun argument n'a été fourni lors de la création d'une nouvelle instance de classe de données de stockage, de sorte que des valeurs par défaut ont été utilisées. Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

150

Les membres de la classe de données sont mutables

Les classes de données sont mutables, vous pouvez donc modifier la valeur de ses membres en obtenant une référence à eux. Vous trouverez ci-dessous un exemple de code:

à partir des classes de données importent la classe de données
@dataclass
Classe Stockinhand:
pommes: int = 40
oranges: int = 50
mangues: int = 60
def total_stock (self) -> int:
se retourner.pommes + soi.oranges + soi.mangues
stock = stockinhand ()
action.pommes = 100
imprimer (stock.total_stock ())

La valeur de la variable de pommes a été modifiée avant d'appeler la méthode Total_stock. Après avoir exécuté l'échantillon de code ci-dessus, vous devriez obtenir la sortie suivante:

210

Création d'une classe de données à partir d'une liste

Vous pouvez créer une classe de données programmatiquement à l'aide de la méthode «Make_dataclass», comme indiqué dans l'échantillon de code ci-dessous:

Importer des classes de données
fields = [("pommes", int, 40), ("oranges", int, 50), ("mangues", int, 60)]
Stockinhand = Dataclasses.Make_dataclass (
"Stockinhand", champs,
namespace = 'total_stock': lambda self: self.pommes + soi.oranges + soi.mangues
)
stock = stockinhand ()
action.pommes = 100
imprimer (stock.total_stock ())

La méthode Make_dataclass prend un nom de classe et une liste des champs membres comme deux arguments obligatoires. Vous pouvez définir les membres comme une liste de tuples où chaque tuple contient le nom de la variable, son type indice et sa valeur par défaut. La définition de la valeur par défaut n'est pas requise, vous pouvez l'omettre pour ne pas affecter la valeur par défaut. L'argument d'espace de noms en option prend un dictionnaire qui peut être utilisé pour définir les fonctions des membres à l'aide de paires de valeurs clés et de fonctions lambda. Le code ci-dessus est exactement équivalent à la définition manuellement la classe de données suivante:

à partir des classes de données importent la classe de données
@dataclass
Classe Stockinhand:
pommes: int = 40
oranges: int = 50
mangues: int = 60
def total_stock (self):
se retourner.pommes + soi.oranges + soi.mangues
stock = stockinhand ()
action.pommes = 100
imprimer (stock.total_stock ())

Après avoir exécuté les deux échantillons de code ci-dessus, vous devriez obtenir la sortie suivante:

210

Pourquoi utiliser une classe de données au lieu d'une classe?

Vous vous demandez peut-être pourquoi utiliser les classes de données si elles sont presque les mêmes que les autres classes Python? L'un des principaux avantages de l'utilisation des classes de données est sa concision. Vous pouvez créer des classes de données en utilisant des raccourcis propres et minimaux sans trop de code de passe-partout. Ils sont particulièrement conçus pour être utilisés comme conteneurs de données où les variables peuvent être facilement accessibles en utilisant la notation de points, bien que vous puissiez également utiliser les classes de données comme classes à part entière. En termes simples, si vous souhaitez utiliser une classe Python juste pour l'utiliser comme magasin de données, DataClass semble être un meilleur choix.

Conclusion

Les classes de données de Python fournissent un moyen minimal de créer rapidement des classes Python destinées à être utilisées comme magasins de données. Vous pouvez obtenir des références aux membres des classes de données en utilisant la notation de points et ils sont particulièrement utiles lorsque vous recherchez des dictionnaires comme des paires de valeurs clés qui peuvent être accessibles en utilisant la notation de points.