Estou procurando casos de uso práticos e não sintéticos de decoradores de classe Python. Até agora, o único caso que fez sentido para mim é o registro de uma classe em um sistema de editor-assinante, por exemplo, plugins ou eventos, algo como:
@register
class MyPlugin(Plugin):
pass
ou
@recieves_notifications
class Console:
def print(self, text):
...
Quaisquer outros casos sensatos em que estive pensando poderiam ter sido construídos sobre herança, metaclasses ou métodos de decoração. Você poderia compartilhar exemplos bons (ou ruins!) Do uso de decoradores de classe?
Obrigado!
ABCMeta
, não o@abstractclass
decorador de classes.Respostas:
Ao escrever testes de unidade com
@unittest.skipIf
e@unittest.skipUnless
pode ser usado em métodos individuais ou em umaunittest.TestCase
definição de classe inteira . Isso facilita muito a criação de testes para problemas específicos da plataforma.Exemplo de
asyncio/test_selectors
fonte
Decoradores de classe foram criados explicitamente para tornar mais agradáveis algumas coisas que já eram expressáveis através de metaclasses, do PEP :
fonte
A partir dessa pergunta de estouro de pilha:
fonte
É inútil procurar casos de uso que possam ser feitos com decoradores em classes - qualquer coisa que possa ser feita com decoradores em classes pode ser feita com metaclasses. Até o seu exemplo de registro. Para provar isso, aqui está uma metaclasse que aplica um decorador:
Python 2:
Python 3:
fonte