{ "metadata": { "name": "Capitulo19_Heranca_simples" }, "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 19: Heran\u00e7a simples\n", "=============================\n", "_____________________________\n", "Heran\u00e7a \u00e9 um mecanismo que a orienta\u00e7\u00e3o a objeto prov\u00ea, com objetivo de facilitar o reaproveitamento de c\u00f3digo. A ideia \u00e9 que as classes sejam constru\u00eddas formando uma hierarquia.\n", "\n", "![Exemplo de heran\u00e7a](files/bpypd_diags16.png)\n", "\n", "A nova classe pode implementar novos m\u00e9todos e atributos e herdar m\u00e9todos e atributos da classe antiga (que tamb\u00e9m pode ter herdado de classes anteriores), por\u00e9m estes m\u00e9todos e atributos podem substitu\u00eddos na nova classe.\n", "\n", "A forma comum de heran\u00e7a \u00e9 chamada de heran\u00e7a simples, na qual a nova classe \u00e9 derivada de apenas uma classe j\u00e1 existente, por\u00e9m \u00e9 poss\u00edvel criar v\u00e1rias classes derivadas, criando uma hierarquia de classes.\n", "\n", "Para localizar os m\u00e9todos e atributos, a hierarquia \u00e9 seguida de baixo para cima, de forma similar a busca nos *namespaces* local e global.\n", "\n", "![Resolu\u00e7\u00e3o de m\u00e9todo](files/bpypd_diags17.png)\n", "\n", "Exemplo de heran\u00e7a simples:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Pendrive(object):\n", "\n", " def __init__(self, tamanho, interface='2.0'):\n", "\n", " self.tamanho = tamanho\n", " self.interface = interface\n", "\n", "\n", "class MP3Player(Pendrive):\n", "\n", " def __init__(self, tamanho, interface='2.0', turner=False):\n", "\n", " self.turner = turner\n", " Pendrive.__init__(self, tamanho, interface)\n", "\n", "\n", "mp3 = MP3Player(1024)\n", "\n", "print '%s\\n%s\\n%s' % (mp3.tamanho, mp3.interface, mp3.turner)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1024\n", "2.0\n", "False\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A classe *MP3Player* herda de *Pendrive* o tamanho e a interface." ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "" ], "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 } ], "metadata": {} } ] }