web-dev-qa-db-fra.com

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

Je connais @staticmethod, @classmethod, et @property, mais uniquement grâce à une documentation dispersée. Quels sont tous les décorateurs de fonctions intégrés à Python? Est-ce que c'est dans la documentation? Une liste à jour est-elle maintenue quelque part?

60
ryeguy

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

Pour les trouver tous, essayez de rechercher Fonctions intégrées liste, car comme vous pouvez le voir dans glossaire Python la syntaxe du décorateur est juste un sucre syntaxique, comme les deux définitions suivantes créent fonctions égales (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 - est-il logique de l'utiliser de cette façon? :-)

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

35
Abgan

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

Comme Abgan dit , la liste des fonctions intégrées est probablement le meilleur endroit pour regarder. Bien que, puisque les décorateurs peuvent également être implémentés en tant que classes, il n'est pas garanti que ce soit complet.

15
James Brady

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

1
habnabit