Python: Avanzado (Decoradores, Lambda y Excepciones)
97 cards · 🇺🇸 English → 🇪🇸 Español
Decoradores, funciones lambda, manejo de excepciones y otros conceptos avanzados de Python.
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 PythonUna clase de una clase que define cómo se comporta una clase. type es la metaclase por defecto. Las metaclases controlan la creación de clases y pueden modificar los atributos de la clase
- 2Create a custom metaclassclass MyMeta(type): def __new__(cls, name, bases, attrs): # modificar attrs return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=MyMeta): pass
- 3__new____new__ crea la instancia (la devuelve), __init__ la inicializa (devuelve None). __new__ se llama primero y recibe cls; __init__ recibe self
- 4Descriptor in PythonUn objeto que define los métodos __get__, __set__ o __delete__. Los descriptores controlan el acceso a los atributos. Se usan internamente para property, method, classmethod y staticmethod
- 5Write a simple descriptorclass Descriptor: def __get__(self, obj, objtype=None): return value def __set__(self, obj, value): # asignar value class MyClass: attr = Descriptor()
- 6data vs non-data descriptorsDescriptor de datos: define __set__ o __delete__ (mayor prioridad, se comprueba antes que el __dict__ de la instancia) Descriptor sin datos: solo __get__ (menor prioridad, primero se comprueba el __dict__ de la instancia)
- 7Method Resolution Order (MRO)El orden en que Python busca métodos/atributos en una jerarquía de clases. Usa el algoritmo de linealización C3. Se puede ver con ClassName.__mro__ o ClassName.mro()
- 8How does super() work?Devuelve un objeto proxy que delega las llamadas a métodos a la siguiente clase en el MRO. super().__init__() llama al __init__ del padre siguiendo el MRO, no solo al padre directo
- 9__call__Hace que una instancia sea invocable como una función. Se llama al usar la sintaxis obj(): class Adder: def __call__(self, x, y): return x + y a = Adder() a(3, 5) # devuelve 8
- 10__getattr__ vs __getattribute____getattr__: se llama solo cuando el atributo NO se encuentra de forma normal __getattribute__: se llama para CADA acceso a un atributo (más potente, más peligroso)
- 11__setattr__Se llama al asignar CUALQUIER atributo: obj.attr = value Cuidado: self.x = y dentro de __setattr__ provoca recursión infinita. Usa object.__setattr__(self, 'x', y) o __dict__
- 12__delattr__Se llama al eliminar un atributo: del obj.attr Permite un comportamiento personalizado al eliminar atributos
- 13__enter__ and __exit__ used forProtocolo de gestor de contexto para las sentencias 'with': __enter__ se ejecuta al inicio (devuelve el valor para 'as') __exit__ se ejecuta al final (recibe la información de la excepción si la hay)
- 14Write a simple context manager classclass MyContext: def __enter__(self): # configuración return self def __exit__(self, exc_type, exc_val, exc_tb): # limpieza return False # no suprimir excepciones
- 15__slots__Restringe los atributos de instancia a un conjunto fijo, evitando la creación de __dict__. Ahorra memoria y da un ligero aumento de rendimiento: class Point: __slots__ = ['x', 'y']
- 16__str__ vs __repr____str__: cadena legible para humanos (usada por str(), print()) __repr__: representación inequívoca para depuración (usada por repr(), el intérprete interactivo) Objetivo: eval(repr(obj)) debería recrear obj
- 17What comparison operators does __lt__ enable?__lt__ define el operador <. Python deriva automáticamente <=, > y >= usando el decorador functools.total_ordering si defines __lt__ y __eq__
- 18Rich comparison methods__lt__ (<), __le__ (<=), __eq__ (==), __ne__ (!=), __gt__ (>), __ge__ (>=) Implementa estos métodos para controlar el comportamiento de las comparaciones
- 19What does __hash__ need to satisfy?Los objetos que se consideran iguales deben tener el mismo valor de hash: si a == b entonces hash(a) == hash(b) El hash debe ser inmutable durante la vida del objeto Por defecto: el hash se basa en id()
- 20__bool__Define el valor de verdad del objeto en contexto booleano (if obj:). Si no está definido, se comprueba __len__ (0 es False). Si tampoco existe, el objeto se considera True
- 21What arithmetic operators can you override?__add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/), __floordiv__ (//), __mod__ (%), __pow__ (**) También las versiones reflejadas: __radd__, __rsub__, etc.
- 22Reflected arithmetic methods__radd__, __rsub__, etc. Se llaman cuando el operando de la izquierda no soporta la operación: 3 + obj llama a obj.__radd__(3) si int no tiene __add__ para el tipo de obj
- 23__getitem__Habilita la notación de subíndice: obj[key] Se implementa para contenedores personalizados, tipos de mapeo o secuencias: class MyList: def __getitem__(self, index): return self.data[index]
- 24__setitem__Habilita la asignación por subíndice: obj[key] = value Se usa para contenedores mutables
- 25__delitem__Habilita la eliminación por subíndice: del obj[key] Elimina un elemento del contenedor
- 26__contains__Implementa el operador 'in': key in obj Si no está definido, Python recurre a iterar y comparar usando __iter__ o __getitem__
- 27__iter__ vs __next____iter__: devuelve el objeto iterador (normalmente self) __next__: devuelve el siguiente valor y lanza StopIteration cuando termina Juntos hacen que un objeto sea iterable
- 28__len__Devuelve la longitud del contenedor, llamado por len(obj) Debe devolver un entero no negativo
- 29__reversed__Devuelve un iterador inverso: reversed(obj) Si no está definido, reversed() recurre a __len__ y __getitem__
- 30__missing__ in dict subclassesSe llama desde __getitem__ cuando no se encuentra la clave. Permite un comportamiento predeterminado personalizado: 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 : avancé (décorateurs, lambda et exceptions)
97 cards · 🇺🇸 English
Décorateurs, fonctions lambda, gestion des exceptions et autres concepts Python avancés.
- 🐍
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.
