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.
Try the first 10 cards
1 / 10Metaclass in Python
Tap the card for the answer · swipe right if you knew it, left if not
Already have an account? Sign in
Cards
- 1Metaclass in PythonUne 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
- 2Create a custom metaclassclass MyMeta(type): def __new__(cls, name, bases, attrs): # modifier attrs return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=MyMeta): pass
- 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
- 4Descriptor in PythonUn 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
- 5Write a simple descriptorclass Descriptor: def __get__(self, obj, objtype=None): return value def __set__(self, obj, value): # définir value class MyClass: attr = Descriptor()
- 6data vs non-data descriptorsDescripteur 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)
- 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()
- 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__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__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__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__delattr__Appelé lors de la suppression d'un attribut : del obj.attr Permet un comportement personnalisé lors de la suppression d'un attribut
- 13__enter__ and __exit__ used forProtocole 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)
- 14Write a simple context manager classclass 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__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__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
- 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__
- 18Rich comparison methods__lt__ (<), __le__ (<=), __eq__ (==), __ne__ (!=), __gt__ (>), __ge__ (>=) À implémenter pour contrôler le comportement des comparaisons
- 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__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
- 21What arithmetic operators can you override?__add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/), __floordiv__ (//), __mod__ (%), __pow__ (**) Ainsi que les versions réfléchies : __radd__, __rsub__, etc.
- 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__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__setitem__Permet l'affectation par indice : obj[key] = value Utilisé pour les conteneurs mutables
- 25__delitem__Permet la suppression par indice : del obj[key] Supprime un élément du conteneur
- 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__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__len__Retourne la longueur du conteneur, appelé par len(obj) Doit retourner un entier non négatif
- 29__reversed__Retourne un itérateur inversé : reversed(obj) S'il n'est pas défini, reversed() se rabat sur __len__ et __getitem__
- 30__missing__ in dict subclassesAppelé 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- 🐍
Python: OOP Fundamentals
59 cards · 🇺🇸 English
Classes, inheritance, and core object-oriented Python concepts.
- 🐍
Python : structures de données et compréhensions
125 cards · 🇺🇸 English
Méthodes de listes/dictionnaires/ensembles ainsi que les compréhensions de listes, de dictionnaires et de générateurs.
- 🐍
Python: Fortgeschritten (Decorators, Lambda & Exceptions)
97 cards · 🇺🇸 English
Decorators, Lambda-Funktionen, Exception-Handling und weitere fortgeschrittene Python-Konzepte.
- 🐍
Python: Funciones integradas
77 cards · 🇺🇸 English
Funciones integradas esenciales que todo desarrollador Python debería conocer.
- 🐍
Python : fondamentaux de la POO
59 cards · 🇺🇸 English
Classes, héritage et concepts fondamentaux de la programmation orientée objet en Python.
- 🐍
Python: Fundamentos de POO
59 cards · 🇺🇸 English
Clases, herencia y conceptos fundamentales de la programación orientada a objetos en Python.
