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

Diferenças para "Decorators"

Diferenças entre as versões de 1 e 3 (2 versões de distância)
Revisão 1e 2006-08-01 17:10:13
Tamanho: 1222
Editor: WalterCruz
Comentário: Apenas o início
Revisão 3e 2008-09-26 14:06:41
Tamanho: 1228
Editor: localhost
Comentário: converted to 1.6 markup
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
[[TableOfContents]] <<TableOfContents>>
Linha 3: Linha 3:
=Decorators= = Decorators =
Linha 5: Linha 5:
==História== == História ==
Linha 9: Linha 9:
==Motivação== == Motivação ==

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