{ "metadata": { "name": "Capitulo24_Decoradores_de_classe" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Python para Desenvolvedores](http://ricardoduarte.github.io/python-para-desenvolvedores/#conteudo)\n", "===================================\n", "2ª edi\u00e7\u00e3o, revisada e ampliada\n", "-----------------------------------\n", "\n", "Cap\u00edtulo 24: Decoradores de classe\n", "=============================\n", "_____________________________\n", "A partir da vers\u00e3o 2.6, os decoradores podem ser aplicados em classes.\n", "\n", "Exemplo:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import time\n", "\n", "def logger(cls):\n", " \"\"\"\n", " Fun\u00e7\u00e3o decoradora de classes\n", " \"\"\"\n", "\n", " class Logged(cls):\n", " \"\"\"\n", " Classe derivada que mostra os par\u00e2metros de inicializa\u00e7\u00e3o\n", " \"\"\"\n", "\n", " def __init__(self, *args, **kargs):\n", "\n", " print 'Hora:', time.asctime()\n", " print 'Classe:', repr(cls)\n", " print 'args:', args\n", " print 'kargs:', kargs\n", " \n", " # Executa a inicializa\u00e7\u00e3o da classe antiga\n", " cls.__init__(self, *args, **kargs)\n", "\n", " # Retorna a nova classe\n", " return Logged\n", "\n", "\n", "@logger\n", "class Musica(object):\n", "\n", " def __init__(self, nome, artista, album):\n", "\n", " self.nome = nome\n", " self.artista = artista\n", " self.album = album\n", "\n", "\n", "m = Musica('Hand of Doom', 'Black Sabbath', album='Paranoid')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Hora: Tue Jul 30 13:40:50 2013\n", "Classe: \n", "args: ('Hand of Doom', 'Black Sabbath')\n", "kargs: {'album': 'Paranoid'}\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Com isso, o decorador mudou o comportamento da classe." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "" ], "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 } ], "metadata": {} } ] }