2011-08-19 19 views
15

Aparte de @staticmethod y @classmethod? La mayoría de los idiomas tienen algunas bibliotecas básicas que hacen uso de la mayoría de las características del lenguaje.¿Python tiene decoradores en la biblioteca estándar?

Parece que muchos de los decoradores que me encuentro haciendo son cosas que mucha gente usaría, pero no he encontrado ningún decorador de pitones incorporado que los haga. ¿Hay tales cosas?

Respuesta

20

property se usa generalmente como decorador.

functools tiene varias funciones normalmente utilizados como decorador, tales como total_ordering, update_wrapped, lru_cache, y wraps.

contextlib tiene el contextmanager decorador.

que tener en cuenta, puede utilizar cualquier función como decorador:

@decorator 
def function(): pass 

es lo mismo que

def function(): pass 
function = decorator(function) 

Con el fin de ser útil, por lo general, tienen que estar esperando un exigible como argumento y necesitan devolver un objeto invocable. (property es una excepción a la segunda parte de eso.)

Las clases también se pueden decorar, exactamente de la misma manera.

También hay un list of decorators on the Python Wiki. Algunos de ellos están en la biblioteca estándar, otros no.

0

decoradores de Python son funciones apenas aclara u otros callables que tienen como único argumento de la función o de clase para ser decorado. Como tal, puede usar muchas funciones ordinarias como decoradores y viceversa. El posible uso como decorador a menudo no está documentado explícitamente.

+0

Mencioné esto en mi respuesta, con un ejemplo. – agf

Cuestiones relacionadas