🐍

Python : avancé (décorateurs, lambda et exceptions)

97 cards · 🇺🇸 English → 🇫🇷 Français

Décorateurs, fonctions lambda, gestion des exceptions et autres concepts Python avancés.

Study all 97 cards for free

Flashcards, quizzes, pixel-art games and a daily review that remembers for you.

Study this deck free

Try the first 10 cards

1 / 10
Question

Metaclass in Python

Knew itLearning

Tap the card for the answer · swipe right if you knew it, left if not

Already have an account? Sign in

Cards

  1. 1Metaclass in Python
    Une classe d'une classe qui définit comment une classe se comporte. type est la métaclasse par défaut. Les métaclasses contrôlent la création des classes et peuvent modifier leurs attributs
  2. 2Create a custom metaclass
    class MyMeta(type): def __new__(cls, name, bases, attrs): # modifier attrs return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=MyMeta): pass
  3. 3__new__
    __new__ crée l'instance (la retourne), __init__ l'initialise (retourne None). __new__ est appelé en premier et reçoit cls ; __init__ reçoit self
  4. 4Descriptor in Python
    Un objet qui définit les méthodes __get__, __set__ ou __delete__. Les descripteurs contrôlent l'accès aux attributs. Utilisés en interne pour property, method, classmethod, staticmethod
  5. 5Write a simple descriptor
    class Descriptor: def __get__(self, obj, objtype=None): return value def __set__(self, obj, value): # définir value class MyClass: attr = Descriptor()
  6. 6data vs non-data descriptors
    Descripteur de données : définit __set__ ou __delete__ (priorité plus haute, vérifié avant le __dict__ de l'instance) Descripteur non-données : seulement __get__ (priorité plus basse, le __dict__ de l'instance est vérifié en premier)
  7. 7Method Resolution Order (MRO)
    L'ordre dans lequel Python recherche les méthodes/attributs dans une hiérarchie de classes. Utilise l'algorithme de linéarisation C3. Consultable via ClassName.__mro__ ou ClassName.mro()
  8. 8How does super() work?
    Retourne un objet proxy qui délègue les appels de méthode à la classe suivante dans le MRO. super().__init__() appelle le __init__ parent en suivant le MRO, pas seulement le parent direct
  9. 9__call__
    Rend une instance appelable comme une fonction. Appelé lors de l'utilisation de la syntaxe obj() : class Adder: def __call__(self, x, y): return x + y a = Adder() a(3, 5) # retourne 8
  10. 10__getattr__ vs __getattribute__
    __getattr__ : appelé seulement quand l'attribut n'est PAS trouvé normalement __getattribute__ : appelé pour CHAQUE accès à un attribut (plus puissant, plus dangereux)
  11. 11__setattr__
    Appelé lors de la définition de N'IMPORTE QUEL attribut : obj.attr = value Attention : self.x = y à l'intérieur de __setattr__ provoque une récursion infinie ! Utiliser object.__setattr__(self, 'x', y) ou __dict__
  12. 12__delattr__
    Appelé lors de la suppression d'un attribut : del obj.attr Permet un comportement personnalisé lors de la suppression d'un attribut
  13. 13__enter__ and __exit__ used for
    Protocole de gestionnaire de contexte pour les instructions 'with' : __enter__ s'exécute au début (retourne la valeur pour 'as') __exit__ s'exécute à la fin (reçoit les infos de l'exception s'il y en a)
  14. 14Write a simple context manager class
    class MyContext: def __enter__(self): # initialisation return self def __exit__(self, exc_type, exc_val, exc_tb): # nettoyage return False # ne pas supprimer les exceptions
  15. 15__slots__
    Restreint les attributs d'instance à un ensemble fixe, empêchant la création d'un __dict__. Économise de la mémoire et apporte un léger gain de performance : class Point: __slots__ = ['x', 'y']
  16. 16__str__ vs __repr__
    __str__ : chaîne lisible par un humain (utilisée par str(), print()) __repr__ : représentation non ambiguë pour le débogage (utilisée par repr(), le shell interactif) Objectif : eval(repr(obj)) devrait recréer obj
  17. 17What comparison operators does __lt__ enable?
    __lt__ définit l'opérateur <. Python peut dériver automatiquement <=, >, >= via le décorateur functools.total_ordering si vous définissez __lt__ et __eq__
  18. 18Rich comparison methods
    __lt__ (<), __le__ (<=), __eq__ (==), __ne__ (!=), __gt__ (>), __ge__ (>=) À implémenter pour contrôler le comportement des comparaisons
  19. 19What does __hash__ need to satisfy?
    Les objets considérés égaux doivent avoir le même hash : si a == b alors hash(a) == hash(b) Le hash doit être immuable pendant toute la durée de vie de l'objet Par défaut : hash basé sur id()
  20. 20__bool__
    Définit la valeur de vérité d'un objet dans un contexte booléen (if obj:). S'il n'est pas défini, __len__ est vérifié (0 vaut False). Sinon, l'objet est considéré comme True
  21. 21What arithmetic operators can you override?
    __add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/), __floordiv__ (//), __mod__ (%), __pow__ (**) Ainsi que les versions réfléchies : __radd__, __rsub__, etc.
  22. 22Reflected arithmetic methods
    __radd__, __rsub__, etc. Appelées quand l'opérande de gauche ne supporte pas l'opération : 3 + obj appelle obj.__radd__(3) si int n'a pas de __add__ pour le type de obj
  23. 23__getitem__
    Permet la notation par indice : obj[key] À implémenter pour des conteneurs personnalisés, des types de mapping ou des séquences : class MyList: def __getitem__(self, index): return self.data[index]
  24. 24__setitem__
    Permet l'affectation par indice : obj[key] = value Utilisé pour les conteneurs mutables
  25. 25__delitem__
    Permet la suppression par indice : del obj[key] Supprime un élément du conteneur
  26. 26__contains__
    Implémente l'opérateur 'in' : key in obj S'il n'est pas défini, Python se rabat sur une itération avec comparaison via __iter__ ou __getitem__
  27. 27__iter__ vs __next__
    __iter__ : retourne l'objet itérateur (généralement self) __next__ : retourne la valeur suivante, lève StopIteration une fois terminé Ensemble, ils rendent un objet itérable
  28. 28__len__
    Retourne la longueur du conteneur, appelé par len(obj) Doit retourner un entier non négatif
  29. 29__reversed__
    Retourne un itérateur inversé : reversed(obj) S'il n'est pas défini, reversed() se rabat sur __len__ et __getitem__
  30. 30__missing__ in dict subclasses
    Appelé par __getitem__ quand la clé n'est pas trouvée. Permet un comportement par défaut personnalisé : class MyDict(dict): def __missing__(self, key): return f'default for {key}'

And 67 more cards. Study the whole deck free

Articles about this deck

More Programming decks

See all
Study all 97 cards free