Files
org-roamings/20220522143325-dataclasses.org
2022-06-04 12:57:39 +02:00

2.4 KiB

Dataclasses

Introduction

Le module dataclasses :

  • Décrit par la 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

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)
('__delattr__', <function __create_fn__.<locals>.__delattr__ at 0x7ff1127a78b0>)
('__eq__', <function __create_fn__.<locals>.__eq__ at 0x7ff1127a7790>)
('__hash__', <function __create_fn__.<locals>.__hash__ at 0x7ff1127a7940>)
('__init__', <function __create_fn__.<locals>.__init__ at 0x7ff1127a7550>)
('__repr__', <function __create_fn__.<locals>.__repr__ at 0x7ff11287c670>)
('__setattr__', <function __create_fn__.<locals>.__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