75 votes

Python - quels sont tous les décorateurs intégrés ?

Je connais @staticmethod , @classmethod y @property mais seulement à travers une documentation éparse. Quels sont tous les décorateurs de fonctions qui sont intégrés à Python ? Est-ce que cela figure dans la documentation ? Y a-t-il une liste à jour maintenue quelque part ?

2 votes

Il n'existe pas de liste officielle, mais ce lien est utile : github.com/lord63/awesome-python-decorator

1 votes

Les plus célèbres sont : @staticmethod , @classmethod , @property , @wraps , @timeit

45voto

Abgan Points 2249

Je ne pense pas. Les décorateurs ne diffèrent pas des fonctions ordinaires, vous les appelez seulement d'une manière plus sophistiquée.

Pour les trouver tous, essayez de chercher Fonctions intégrées car, comme vous pouvez le voir dans Glossaire Python la syntaxe des décorateurs n'est qu'un sucre syntaxique, car les deux définitions suivantes créent des fonctions égales (j'ai copié cet exemple du glossaire) :

def f(...):
    ...
f = staticmethod(f)

@staticmethod
def f(...):

Ainsi, toute fonction intégrée qui renvoie une autre fonction peut être utilisée comme décorateur. La question est de savoir s'il est judicieux de l'utiliser de cette manière :-)

functools contient quelques fonctions qui peuvent être utilisées comme décorateurs, mais ce ne sont pas les fonctions intégrées que vous avez demandées.

21voto

James Brady Points 11646

Ils ne sont pas intégrés, mais cette bibliothèque des exemples de décorateurs est très bonne.

Comme Abgan dit la liste des fonctions intégrées est probablement le meilleur endroit où chercher. Cependant, comme les décorateurs peuvent également être implémentés en tant que classes, il n'est pas garanti qu'elle soit exhaustive.

1voto

habnabit Points 4245

Les décorateurs ne sont même pas obligés de retourner une fonction. J'ai utilisé @atexit.register avant.

1 votes

Eh bien, celui-ci renvoie la même fonction qui lui a été passée dans ce but précis.

1 votes

Oh, c'est vrai ? Je n'ai jamais remarqué.

2 votes

"Les décorateurs ne sont même pas obligés de retourner une fonction" - pour avoir un sens, ils devraient pourtant le faire, car @decor est juste du sucre pour f = decor(f) - sinon vous perdrez la référence à la fonction que vous décorez.

-4voto

S.Lott Points 207588

Il n'existe pas de liste de tous les décorateurs. Il n'existe pas de liste de toutes les fonctions. Il n'existe pas de liste de toutes les classes.

Les décorateurs sont un outil pratique pour définir un aspect commun aux fonctions, méthodes ou classes. Il existe des décorateurs intégrés. De plus, il existe un grand nombre de décorateurs cool et inutiles. De la même manière, il existe un nombre illimité de classes cool et inutiles.

1 votes

Sa question concernait spécifiquement les décorateurs intégrés. Il doit y avoir un finie (et probablement relativement petite) liste de décorateurs intégrés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X