🐍

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.

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
    Una 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
  2. 2Create a custom metaclass
    class MyMeta(type): def __new__(cls, name, bases, attrs): # modificar attrs return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=MyMeta): pass
  3. 3__new__
    __new__ crea la instancia (la devuelve), __init__ la inicializa (devuelve None). __new__ se llama primero y recibe cls; __init__ recibe self
  4. 4Descriptor in Python
    Un 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
  5. 5Write a simple descriptor
    class Descriptor: def __get__(self, obj, objtype=None): return value def __set__(self, obj, value): # asignar value class MyClass: attr = Descriptor()
  6. 6data vs non-data descriptors
    Descriptor 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)
  7. 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()
  8. 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. 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. 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. 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. 12__delattr__
    Se llama al eliminar un atributo: del obj.attr Permite un comportamiento personalizado al eliminar atributos
  13. 13__enter__ and __exit__ used for
    Protocolo 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)
  14. 14Write a simple context manager class
    class MyContext: def __enter__(self): # configuración return self def __exit__(self, exc_type, exc_val, exc_tb): # limpieza return False # no suprimir excepciones
  15. 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. 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
  17. 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__
  18. 18Rich comparison methods
    __lt__ (<), __le__ (<=), __eq__ (==), __ne__ (!=), __gt__ (>), __ge__ (>=) Implementa estos métodos para controlar el comportamiento de las comparaciones
  19. 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. 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
  21. 21What arithmetic operators can you override?
    __add__ (+), __sub__ (-), __mul__ (*), __truediv__ (/), __floordiv__ (//), __mod__ (%), __pow__ (**) También las versiones reflejadas: __radd__, __rsub__, etc.
  22. 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. 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. 24__setitem__
    Habilita la asignación por subíndice: obj[key] = value Se usa para contenedores mutables
  25. 25__delitem__
    Habilita la eliminación por subíndice: del obj[key] Elimina un elemento del contenedor
  26. 26__contains__
    Implementa el operador 'in': key in obj Si no está definido, Python recurre a iterar y comparar usando __iter__ o __getitem__
  27. 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. 28__len__
    Devuelve la longitud del contenedor, llamado por len(obj) Debe devolver un entero no negativo
  29. 29__reversed__
    Devuelve un iterador inverso: reversed(obj) Si no está definido, reversed() recurre a __len__ y __getitem__
  30. 30__missing__ in dict subclasses
    Se 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
Study all 97 cards free