Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Maîtriser Python Attrs : construire classes de données avancées avec exemples pratiques

Maîtriser Python Attrs : construire classes de données avancées avec exemples pratiques

Le package Python Attrs permet de créer classes de données avancées avec annotations simples. Python a son module natif dataclass, mais Attrs offre fonctionnalités supplémentaires !

Installer attrs

Package pas dans librairie standard, installation via pip ou Pipenv. Créez environnement virtuel pour ne pas interférer autres projets. Package = attrs :

$ pip install attrs
# ou avec pipenv:
$ pipenv install attrs

Attrs vs dataclasses

Auteurs d'attrs ont travaillé sur le PEP introduisant dataclasses en Python. Dataclasses natives volontairement simples ; attrs = gamme complète fonctionnalités !

Raisons choisir attrs over dataclasses natives :

Exemple basique Python attrs

import attr

@attr.s
class Person(object):
    name = attr.ib(default='John')
    surname = attr.ib(default='Doe')
    age = attr.ib(init=False)

p = Person()
print(p)
p = Person('Bill', 'Gates')
p.age = 60
print(p)
# Output:
# Person(name='John', surname='Doe', age=NOTHING)
# Person(name='Bill', surname='Gates', age=60)

Observations :

Regardons les fonctionnalités clés sur dataclasses : validateurs et convertisseurs.

Exemple validateur Python attrs

Deux façons d'ajouter validateurs :

  1. Via décorateur
  2. Fournissant fonction callable

Démonstration méthode callable. Attrs offre validateurs built-in, dont instance_of :

>>> @attr.s
... class C(object):
...     x = attr.ib(validator=attr.validators.instance_of(int))
>>> C(42)
C(x=42)
>>> C("une string")
Traceback (most recent call last):
...
TypeError: ("'x' must be <type 'int'> (got 'a string' that is a <type 'str'>).", ...

On a essayé créer objet C avec string pour x, validateur instance_of lance erreur car requiert int pas string.

Définissons notre propre validateur :

import attr

@attr.s
class DividableByTwo(object):
    x = attr.ib()
    
    @x.validator
    def check(self, attribute, value):
        if value % 2 != 0:
            raise ValueError(f'{value} n\'est pas divisible par 2')

print(DividableByTwo(60))
print(DividableByTwo(11))
# Output:
# DividableByTwo(x=60)
# ...
# ValueError: 11 n'est pas divisible par 2

Exemple convertisseur Python attrs

Convertisseur prend valeur définie et la convertit auto. Utilisable pour plein de choses. Ex: conversion auto en int. Méthode callable, ici int() Python :

import attr

@attr.s
class C(object):
    x = attr.ib(converter=int)

c = C("1")
print(c)
# Output:
# C(x=1)

Entrée (string « 1 ») convertie en entier auto. Convertisseurs s'exécutent AVANT validateurs, donc on peut valider valeur finale après conversion. Ex: combiner les deux exemples : convertir n'importe quelle entrée en int, puis vérifier divisibilité par 2.

Utiliser slots avec Python attrs

Enfin, on peut dire à attrs d'utiliser classes slotted. Avantages classes slotted :

En bref : classe slotted = on déclare explicitement attributs d'instance attendus. Python saute certaines vérifications = moins mémoire, légère accélération. Détails doc attrs.

Mais classes slotted ont pièges, surtout créées manuellement. Heureusement, attrs offre activation simple :

import attr

@attr.s(slots=True)
class YourClassName:
    ...

Continuer à apprendre

Python

  1. Maîtriser la méthode strip() de Python : Guide complet et exemples pratiques
  2. Maîtriser str.count() de Python : Compter caractères et sous-chaînes avec exemples
  3. Fonction Python round() expliquée avec exemples pratiques
  4. Maîtriser la fonction Python map() : syntaxe, exemples et bonnes pratiques
  5. Python timeit() : mesurer le temps d'exécution avec exemples pratiques
  6. Python Counter dans collections : comptage efficace, mise à jour et opérations arithmétiques
  7. Python time.sleep() : comment ajouter des délais dans votre code (exemple)
  8. Python list.count() : Guide Expert avec Exemples Pratiques
  9. Python list.index() : Comment Trouver les Positions d'Éléments avec Exemples Pratiques