Je recherche des cas d'utilisation pratiques et non synthétiques de décorateurs de classe Python. Jusqu'à présent, le seul cas qui avait du sens pour moi est l'enregistrement d'une classe dans un système éditeur-abonné, par exemple des plugins ou des événements, quelque chose comme:
@register
class MyPlugin(Plugin):
pass
ou
@recieves_notifications
class Console:
def print(self, text):
...
Tout autre cas sain auquel j'ai pensé aurait pu être construit en plus de l'héritage, des métaclasses ou des méthodes de décoration. Pourriez-vous s'il vous plaît partager de bons (ou mauvais!) Exemples d'utilisation de décorateurs de classe?
Je vous remercie!
ABCMeta
, pas@abstractclass
décorateur de classe.Réponses:
Lors de l'écriture de tests unitaires ayant le
@unittest.skipIf
et@unittest.skipUnless
peut être utilisé sur des méthodes individuelles ou sur uneunittest.TestCase
définition de classe entière . Cela facilite grandement l'écriture de tests pour des problèmes spécifiques à la plate-forme.Exemple de
asyncio/test_selectors
la source
Les décorateurs de classe ont été explicitement créés pour rendre plus agréables certaines choses qui étaient déjà exprimables via des métaclasses, du PEP :
la source
De cette question de débordement de pile:
la source
La recherche de cas d'utilisation pouvant être réalisés avec des décorateurs dans les classes est futile - tout ce qui peut être fait avec des décorateurs dans les classes peut être fait avec des métaclasses. Même votre exemple d'inscription. Pour le prouver, voici une métaclasse qui applique un décorateur:
Python 2:
Python 3:
la source