associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Decorators

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