Estoy buscando casos de uso prácticos y no sintéticos de decoradores de clase Python. Hasta ahora, el único caso que tenía sentido para mí es registrar una clase en un sistema editor-suscriptor, por ejemplo, complementos o eventos, algo como:
@register
class MyPlugin(Plugin):
pass
o
@recieves_notifications
class Console:
def print(self, text):
...
Cualquier otro caso sensato en el que haya estado pensando podría haberse construido sobre la herencia, las metaclases o los métodos de decoración. ¿Podrías compartir ejemplos buenos (o malos) del uso de decoradores de clase?
¡Gracias!
ABCMeta
, no el@abstractclass
decorador de clases.Respuestas:
Al escribir pruebas unitarias que tengan el
@unittest.skipIf
y@unittest.skipUnless
se pueden usar en métodos individuales o en unaunittest.TestCase
definición de clase completa . Esto hace que escribir pruebas para problemas específicos de la plataforma sea mucho más fácil.Ejemplo de
asyncio/test_selectors
fuente
Los decoradores de clase se crearon explícitamente para hacer que algunas cosas que ya se podían expresar mediante metaclases fueran más agradables, desde el PEP :
fuente
De esta pregunta de desbordamiento de pila:
fuente
Buscar casos de uso que se puedan hacer con decoradores en clases es inútil; todo lo que se puede hacer con decoradores en clases se puede hacer con metaclases. Incluso su ejemplo de registro. Para probarlo, aquí hay una metaclase que aplica un decorador:
Python 2:
Python 3:
fuente