A partir da versão 2.6, os decoradores podem ser aplicados em classes.
Exemplo:
import time
def logger(cls):
"""
Função decoradora de classes
"""
class Logged(cls):
"""
Classe derivada que mostra os parâmetros de inicialização
"""
def __init__(self, *args, **kargs):
print 'Hora:', time.asctime()
print 'Classe:', repr(cls)
print 'args:', args
print 'kargs:', kargs
# Executa a inicialização da classe antiga
cls.__init__(self, *args, **kargs)
# Retorna a nova classe
return Logged
@logger
class Musica(object):
def __init__(self, nome, artista, album):
self.nome = nome
self.artista = artista
self.album = album
m = Musica('Hand of Doom', 'Black Sabbath', album='Paranoid')
Hora: Tue Jul 30 13:40:50 2013 Classe: <class '__main__.Musica'> args: ('Hand of Doom', 'Black Sabbath') kargs: {'album': 'Paranoid'}
Com isso, o decorador mudou o comportamento da classe.