A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...
A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...
A4 apaisado, 2 columnas - PET: Python Entre Todos - Python ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Clases decoradoras con argumentos 26"""called: '{0}' '{1} times'""".format(self.callable.__name__,LogCallable.count_dict[self.callable.__name__]))message.append("""Arguments: {0}""".format(", ".join(map(str, args))))message.append("""Keyword Arguments: {0}""".format(", ".join(["{0}={1}".format(key, value) \for (key, value) in kwargs.items()])))Logs how many times the callable was called and the params it had."""def __init__(self, do_count):self.do_count = do_countif not getattr(LogCallable, 'count_dict', None) and do_count:LogCallable.count_dict = {}def __call__(self, callable):def wrap(*args, **kwargs):callable(*args, **kwargs)message = []logging.debug("; ".join(message))En una clase decoradora que no recibe argumentos, el primer parámetro del __init__ es elcallable. Los parámetros de __call__ son los argumentos posicionales y de palabra claveque se utilizaron para llamar al callable.La diferencia más interesante a marcar es que a través del uso del __init__ y de __call__nos hemos evitado usar una función anidada.La forma de usar el decorador es la misma que aquella de la función decoradora sinargumento:@LogCallabledef yes(string='y', end='\n'):[...]Clases decoradoras con argumentosEntendiendo bien los 3 casos de decoradores anteriores es posible inferir cómo sería unaclase decoradora que recibe argumentos.Ejemplo de LogCallable con parámetro:class LogCallable(object):"""Decorates callable and logs information about it.if self.do_count:LogCallable.count_dict.setdefault(callable.__name__, 0)LogCallable.count_dict[callable.__name__] += 1message.append(u"""called: '{0}' '{1} times'""".format(callable.__name__,LogCallable.count_dict[callable.__name__],))else:message.append(u"""called: '{0}'""".format(callable.__name__))message.append(u"""Arguments: {0}""".format(", ".join(map(str, args))))message.append(u"""Keyword Arguments: {0}""".format(", ".join(["{0}={1}".format(key, value) \<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar