:PROPERTIES: :ID: f892dbdd-0cb5-4204-bca0-09aafb41f7ca :mtime: 20220522151003 :ctime: 20220522143325 :END: #+title: Dataclasses * Introduction Le module /dataclasses/ : * Décrit par la [[https://www.python.org/dev/peps/pep-0557][PEP-557 - Data Classes]], * A été ajouté dans la version 3.7 de CPython, * Fournit un /decorator/ et des fonctions générant automatiquement des /dunder methods/, telles que ~__init__~ or ~__repr__~, aux classes (évite l'écriture de /boilerplate code/). * Howto ** Dataclass /immutable/ #+BEGIN_SRC python :results output from dataclasses import dataclass, field from datetime import datetime from typing import List from uuid import UUID, uuid4 @dataclass(frozen=True) class Tweets: """ Class to store tweets of users """ tweet_body: str = None tweet_time: datetime = datetime.utcnow() tweet_id: UUID = uuid4() tweet_lang: str = 'en-IN' tweet_place: str = 'IN' tweet_retweet_count: int = field(repr=False, compare=False, default=0) tweet_hashtags: List[str] = field(default_factory=list) tweet_user_id: str = None tweet_user_name: str = None from inspect import getmembers, isfunction for member in getmembers(Tweets, predicate=isfunction): print(member) #+END_SRC #+RESULTS: : ('__delattr__', .__delattr__ at 0x7ff1127a78b0>) : ('__eq__', .__eq__ at 0x7ff1127a7790>) : ('__hash__', .__hash__ at 0x7ff1127a7940>) : ('__init__', .__init__ at 0x7ff1127a7550>) : ('__repr__', .__repr__ at 0x7ff11287c670>) : ('__setattr__', .__setattr__ at 0x7ff1127a7820>) Il est nécessaire d'utiliser la méthode ~dataclasses.field~ et de préciser le paramètre ~default_factory~ pour l'utilisation d'objets /mutable/. Les paramètres suivants de la méthode ~dataclasses.field~ permettent de contrôler le code généré : * ~repr~ : A mettre à ~False~ pour que l'attribut ne soit pas inclus dans la représentation (~__repr__~) de l'objet, * ~compare~: A mettre à ~False~ pour que l'attribut ne soit pas utilisé par la méthode ~__eq__~ de l'objet * Références * [[https://medium.com/gitconnected/advanced-python-dataclasses-6a1e53bc4d8d][Advanced Python dataclasses - Medium]] * [[https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass][Dataclasses - Python]]