=Decorators=
==História==
Decorators foram introduzidos na versão 2.4 de python, e são definidos na PEP 318. Segundo a própria PEP, esse nome pode não ser definitivo, já que existe um design pattern com o mesmo nome e além disso, o nome decorator tem um significado diferente na área de compiladores. Mas como ele já está aí há um bom tempo com esse nome, não creio que vá haver mudanças.
==Motivação==
Imagine o seguinte exemplo:
class AlgumaCoisa: classattribute = None def set_some(cls, argument): cls.classattribute = argument set_some = classmethod(set_some)
Com esse trecho, a função set_some se torna um método de classe, permitindo construções como: AlgumaCoisa.set_some(29), que irá alterar o atributo de classe classattribute.
Mas imagine que a função set_some ficasse grande - algumas centenas de linhas de código. Nessa caso, ficaria fácil esquecer de definir o classmethod no final.
Usando a nova sintaxe dos decorators, podemos fazer:
class AlgumaCoisa: classattribute = None @classmethod def set_some(cls, argument): cls.classattribute = argument