59 lines
2.4 KiB
Org Mode
59 lines
2.4 KiB
Org Mode
: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__', <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
|
|
|
|
* 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]]
|