¿Por qué decorator
no decora un método estático o un método de clase?¿Por qué @decorator no puede decorar un método estático o un método de clase?
from decorator import decorator
@decorator
def print_function_name(function, *args):
print '%s was called.' % function.func_name
return function(*args)
class My_class(object):
@print_function_name
@classmethod
def get_dir(cls):
return dir(cls)
@print_function_name
@staticmethod
def get_a():
return 'a'
Tanto get_dir
y get_a
resultado en AttributeError: <'classmethod' or 'staticmethod'>, object has no attribute '__name__'
.
¿Por qué se basa decorator
en el atributo __name__
en lugar del atributo func_name
? (Todas las funciones de Afaik, incluidos classmethods y staticmethods, tienen el atributo func_name
).
Editar: Estoy usando Python 2.6.
función ¿Por qué llamas (* args) dentro del decorador? Su función es simplemente devolver una función (en su caso, no modificada). – gahooa
gahooa: porque es una forma de 'decorador' (lo que importa, no la construcción del lenguaje) funciona, ver http://pypi.python.org/pypi/decorator. –
@taldor tiene un módulo de decorador en py 2.6? – mykhal