2009-01-26 8 views
44

Je connais @staticmethod, @classmethod, et @property, mais seulement par le biais de la documentation dispersée. Y a-t-il une liste complète des décorateurs de fonctions qui sont construits en Python?Python - Y at-il une liste de décorateurs quelque part?

+0

Il n'y a pas une liste officielle, mais ce lien est utile: https://github.com/lord63/awesome-python-decorator – Casebash

Répondre

28

Je ne pense pas. Les décorateurs ne diffèrent pas des fonctions ordinaires, vous les appelez simplement de manière plus fantaisiste.

Pour trouver tous essayer la recherche Built-in functions liste, parce que vous pouvez voir dans Python glossary la syntaxe de décorateur est juste un sucre syntaxique, comme les deux définitions suivantes permettent de créer des fonctions égales (copier cet exemple de glossaire):

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

@staticmethod 
def f(...): 

Ainsi, toute fonction intégrée renvoyant une autre fonction peut être utilisée comme décorateur. La question est: est-il sensé de l'utiliser de cette façon? :-)

functools Le module contient certaines fonctions qui peuvent être utilisées comme décorateurs, mais elles ne sont pas des built-ins que vous avez demandés.

12

Ils ne sont pas intégrés, mais this library d'exemples de décorateurs si très bien. En tant que Abgan says, la liste de fonctions intégrée est probablement le meilleur endroit pour regarder, bien que les décorateurs puissent également être implémentés en tant que classes, il n'est pas garanti d'être complet.

-2

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

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

1

Les décorateurs n'ont même pas besoin de retourner une fonction. J'ai déjà utilisé @atexit.register auparavant.

+0

Eh bien, on retourne la même fonction qui lui est passée dans ce but précis. –

+0

Oh, c'est ça? Je n'ai jamais remarqué. – habnabit

+1

"Les décorateurs ne sont même pas tenus de retourner une fonction" - pour avoir un sens, cependant, ils devraient, puisque '@ decor' est juste du sucre pour' f = decor (f) '- sinon vous perdrez la référence à la fonction que vous décorez. –

Questions connexes