2.4 KiB
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