Python - 3ª Aula   Bruno Gama Catão
Relembrando ...• Na aula passada vimos: • Como criar funções; • Listas, tuplas, conjuntos e dicionários; • Módulos random,...
Funçõesdef fatorial(n):    if n == 0:        return 1;    return n * fatorial(n - 1)#Chamando a funcaoprint str(fatorial(5))
Listas• Padrão:   •   legumes = [Batata, Cenoura, Repolho]• Listas compactadas:  salarios = [510, 720, 850, 1200] #aumento...
Tuplas#tupla simplestelefone = (83, 33102222)print Telefone (%d) %d % telefone#Lista de tuplastelefones = [(83, 33332222),...
Conjuntos# Lista de comprascompras = [laranja, uva, maca, uva]# Verificando quais frutas foram compradasfrutas = set(compr...
Dicionáriosaluno = {"nome" : "Bruno", "curso" : "SI", "media" : 8.2};print "%s - %.2f" % (aluno["nome"], aluno["media"])
Módulo randomimport random#Sorteando as dezenasdezenas = random.sample(range(1, 61), 6)#Ordenandodezenas.sort()print dezenas
Módulo urllib2import urllib2url = raw_input(Digite a URL: )print urllib2.urlopen(url).readlines()
Módulo zipfile# -*- coding: latin-1 -*-from zipfile import ZipFilearquivo = raw_input(Digite o nome do arquivo: )diretorio ...
Resposta ao desafio# -*- coding: latin-1 -*-import osarquivo = open(raw_input(Qual o arquivo do cabeçalho ?))cabecalho = ar...
Criando seus próprios      módulos• Um módulo em Python é um arquivo .py;• Módulos podem ser organizados em  diretórios (p...
Exemplo• Criem um novo projeto PyDev chamado  Aula3;• Criem dois módulos: • funcoes; • principal.
Módulo “funcoes” def fatorial(n):     if n == 0:         return 1     return n * fatorial(n - 1) def somatorio(n):     if ...
Módulo “funcoes”                       Lembram de recursividade ? def fatorial(n):     if n == 0:         return 1     ret...
Módulo “principal”# -*- coding: latin-1 -*-import funcoesn = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, ...
Módulo “principal”# -*- coding: latin-1 -*-import funcoes            import <nome_modulo>n = int(raw_input(Digite um númer...
Módulo “principal”# -*- coding: latin-1 -*-import funcoes            import <nome_modulo>n = int(raw_input(Digite um númer...
Outras formas de  importação# -*- coding: latin-1 -*-from funcoes import *n = int(raw_input(Digite um número: ))print "fat...
Outras formas de  importação               from <nome_modulo> import <parte|*># -*- coding: latin-1 -*-from funcoes import...
Outras formas de  importação               from <nome_modulo> import <parte|*># -*- coding: latin-1 -*-from funcoes import...
Outras formas de      importação• Você pode importar apenas uma função,  isso diminui o uso de memória pela sua  aplicação...
Atenção• Quando se importa um módulo o seu  conteúdo é executado;• Portanto, se no corpo do módulo existirem  comandos sol...
Exemplo• Vamos modificar o nosso módulo “funcoes”,  execute o módulo “principal” e veja o que acontece:         # -*- codin...
Mas ...• E se eu quiser que o meu módulo tenha  apenas funções quando for importado, mas  que faça alguma coisa quando for...
Ponto de Entrada         “main”• Aqui está o truque para fazer isso:    # -*- coding: latin-1 -*-    def fatorial(n):     ...
Pacotes• Pacotes são diretórios onde podemos  agrupar os nossos módulos;• São uma forma de organização;• Todo pacote pode ...
Exemplo• Crie um PyDev package chamado util em  seu projeto;• Veja que automaticamente foi criado um  módulo __init__;• Mo...
Modificando o módulo      principal  # -*- coding: latin-1 -*-  from util.funcoes import *  n = int(raw_input(Digite um núm...
Modificando o módulo      principal            from <pacote>.<nome_modulo> import <parte|*>  # -*- coding: latin-1 -*-  fro...
E o __init__ ?• Vamos adicionar algum conteúdo a este  módulo para ver o seu funcionamento:        print "Pacote util carr...
Documentação• A documentação de funções em Python é  feita por uma String de múltiplas linhas logo  em seu início;• Toda e...
Exemplo• No módulo util.funcoes: def fatorial(n):          Esta função calcula o fatorial de um número          if n == 0:...
Módulos externos• Infelizmente Python não possui um procedimento  padrão para instalação de módulos externos;• Cada plataf...
Instalando o PIL    MacOSX - Snow Leopard•   É a instalação mais complicada !•   É necessário antes ter instalado o XCode,...
Instalando o PILMacOSX - Snow Leopard• Instale a libjpeg (pacote dmg);• Descompacte o PIL (Imaging-1.1.7.tar.gz);• Dentro ...
Instalando o PIL           Ubuntu• No terminal digite: • sudo apt-get install python-imaging• É só isso !
Instalando o PIL         Windows• Faça o download do instalador para  Windows no endereço: • http://www.pythonware.com/pro...
Configurando o PyDev•   Para adicionar módulos externos ao seu projeto PyDev é    necessário:•   Clique com o botão direito...
Exemplo      • Crie um módulo chamado testepil:import Imageim = Image.open(raw_input("Digite o caminho para uma imagem: ")...
Exemplo   Criando um thumbnailimport Imagetamanho = (128, 128)entrada = raw_input("Digite o caminho para uma imagem: ")im ...
Desafio para já• Modifiquem o gerador de álbuns para: • Gerar um thumbnail para cada foto; • Exibir estes thumbnails na pági...
# -*- coding: latin-1 -*-import osimport Imagecabecalho = <html> <head><title></title></head> <body> <h1>%s</h1>corpo = <a...
diretorio = raw_input(Qual o diretório das imagens ?)formato   = raw_input(Qual o formato das imagens ?)album     = raw_in...
Escrevendo nas imagensimport Image, ImageFont, ImageDrawentrada = raw_input("Digite o caminho para uma imagem: ")im = Imag...
Orientação a objetos• Python é uma linguagem orientada a objetos;• A conceito básico da orientação a objetos  são as class...
Exemploclass Pessoa:    def qualSeuNome(self):        print "Bruno"p = Pessoa();p.qualSeuNome()
Exemplo             Definição da classeclass Pessoa:    def qualSeuNome(self):        print "Bruno"p = Pessoa();p.qualSeuNo...
Exemplo             Definição da classeclass Pessoa:    def qualSeuNome(self):        print "Bruno"                        ...
Exemplo                               Definição da classe                   class Pessoa:                       def qualSeu...
Exemplo                               Definição da classe                   class Pessoa:                       def qualSeu...
Construtores• Objetos são criados através de um método especial  chamado de construtor;• Toda classe possui pelo menos um ...
E o self ?• Self é uma referência para o próprio  objeto;• Sempre o primeiro parâmetro de um  método é self (com exceção d...
Polimorfismo ?• Poli o quê ? • Em linguagens tradicionais (Java, C++ e    C#) é possível definir métodos com o    mesmo nome...
Exemploclass Pessoa:    def __init__(self, nome= "Fulano"):        self.nome = nome    def qualSeuNome(self):        print...
Exemploclass Pessoa:    def __init__(self, nome=None):        if nome:            self.nome = nome        else:           ...
Exemplo                  Valor nulo (vazio)class Pessoa:    def __init__(self, nome=None):        if nome:            self...
Exemplo                    Valor nulo (vazio)class Pessoa:    def __init__(self, nome=None):        if nome:            se...
Exemplo                      Valor nulo (vazio)                    class Pessoa:                         def __init__(self...
Métodos e Atributos de classe (estáticos)        class Pessoa:            qtd = 0            def __init__(self, nome):    ...
Métodos e Atributos de classe (estáticos)        class Pessoa:                          Atributo de classe            qtd ...
Métodos e Atributos de classe (estáticos)        class Pessoa:                           Atributo de classe            qtd...
Métodos e Atributos de classe (estáticos)        class Pessoa:                           Atributo de classe            qtd...
Métodos e Atributos de classe (estáticos)        class Pessoa:                           Atributo de classe            qtd...
Métodos e Atributos de classe (estáticos)        class Pessoa:                           Atributo de classe            qtd...
Herança• Uma classe pode herdar os métodos e atributos de  outras;• A intenção é reusar código;• Python suporta herança si...
import math                         Exemploclass FormaGeometrica:    def __init__(self, tamanhoLado):        self.tamanhoL...
import math                         Exemploclass FormaGeometrica:    def __init__(self, tamanhoLado):        self.tamanhoL...
import math                         Exemploclass FormaGeometrica:    def __init__(self, tamanhoLado):        self.tamanhoL...
import math                         Exemploclass FormaGeometrica:    def __init__(self, tamanhoLado):        self.tamanhoL...
Erros e Exceções•   O tratamento de erros em Python é feito através do    tratamento de exceções;•   A idéia é a seguinte:...
Exemplo# -*- coding: latin-1 -*-idade = 0while True:    try:         idade = int(raw_input("Digite a sua idade: "))       ...
Exemplo# -*- coding: latin-1 -*-idade = 0while True:    try:         idade = int(raw_input("Digite a sua idade: "))       ...
Exemplo# -*- coding: latin-1 -*-idade = 0while True:    try:         idade = int(raw_input("Digite a sua idade: "))       ...
Sugestão       • Se em um programa você precisar ler mais           de uma vez um valor inteiro do teclado,           crie...
Qual exceção devo                  tratar ?        • Como descobrir o nome da exceção ?        • É só provocar o seu lança...
Qual exceção devo                  tratar ?        • Como descobrir o nome da exceção ?        • É só provocar o seu lança...
Upcoming SlideShare
Loading in …5
×

Python 03

1,086 views

Published on

Continuação do curso de Python:

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,086
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
54
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Python 03

    1. 1. Python - 3ª Aula Bruno Gama Catão
    2. 2. Relembrando ...• Na aula passada vimos: • Como criar funções; • Listas, tuplas, conjuntos e dicionários; • Módulos random, urllib2 e zipfile.
    3. 3. Funçõesdef fatorial(n): if n == 0: return 1; return n * fatorial(n - 1)#Chamando a funcaoprint str(fatorial(5))
    4. 4. Listas• Padrão: • legumes = [Batata, Cenoura, Repolho]• Listas compactadas: salarios = [510, 720, 850, 1200] #aumento de 10% salarios = [s * 1.01 for s in salarios]
    5. 5. Tuplas#tupla simplestelefone = (83, 33102222)print Telefone (%d) %d % telefone#Lista de tuplastelefones = [(83, 33332222), (84, 32215678)]for tel in telefones: print Telefone (%d) %d % tel
    6. 6. Conjuntos# Lista de comprascompras = [laranja, uva, maca, uva]# Verificando quais frutas foram compradasfrutas = set(compras)print frutas
    7. 7. Dicionáriosaluno = {"nome" : "Bruno", "curso" : "SI", "media" : 8.2};print "%s - %.2f" % (aluno["nome"], aluno["media"])
    8. 8. Módulo randomimport random#Sorteando as dezenasdezenas = random.sample(range(1, 61), 6)#Ordenandodezenas.sort()print dezenas
    9. 9. Módulo urllib2import urllib2url = raw_input(Digite a URL: )print urllib2.urlopen(url).readlines()
    10. 10. Módulo zipfile# -*- coding: latin-1 -*-from zipfile import ZipFilearquivo = raw_input(Digite o nome do arquivo: )diretorio = raw_input(Digite o diretório de destino: )zip = ZipFile(arquivo)zip.extractall(diretorio)
    11. 11. Resposta ao desafio# -*- coding: latin-1 -*-import osarquivo = open(raw_input(Qual o arquivo do cabeçalho ?))cabecalho = arquivo.read()arquivo = open(raw_input(Qual o arquivo do corpo ?))corpo = arquivo.read()arquivo = open(raw_input(Qual o arquivo do rodapé ?))rodape = arquivo.read()diretorio = raw_input(Qual o diretório das imagens ?)formato = raw_input(Qual o formato das imagens ?)album = raw_input(Qual o nome do álbum ?)pagina = cabecalho % albumfor arquivo in os.listdir(diretorio): if arquivo.endswith(formato): pagina += corpo % (arquivo, arquivo)pagina += rodapearquivo = open(os.path.join(diretorio, "album.html"), "w")arquivo.write(pagina)arquivo.close()
    12. 12. Criando seus próprios módulos• Um módulo em Python é um arquivo .py;• Módulos podem ser organizados em diretórios (pacotes);• Para utilizar mais de um módulo em uma aplicação é necessário importar este outro módulo.
    13. 13. Exemplo• Criem um novo projeto PyDev chamado Aula3;• Criem dois módulos: • funcoes; • principal.
    14. 14. Módulo “funcoes” def fatorial(n): if n == 0: return 1 return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0 return n + somatorio(n - 1)
    15. 15. Módulo “funcoes” Lembram de recursividade ? def fatorial(n): if n == 0: return 1 return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0 return n + somatorio(n - 1)
    16. 16. Módulo “principal”# -*- coding: latin-1 -*-import funcoesn = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, funcoes.fatorial(n))n = int(raw_input(Digite um número: ))print "sum(%d) = %d" % (n, funcoes.somatorio(n))
    17. 17. Módulo “principal”# -*- coding: latin-1 -*-import funcoes import <nome_modulo>n = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, funcoes.fatorial(n))n = int(raw_input(Digite um número: ))print "sum(%d) = %d" % (n, funcoes.somatorio(n))
    18. 18. Módulo “principal”# -*- coding: latin-1 -*-import funcoes import <nome_modulo>n = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, funcoes.fatorial(n))n = int(raw_input(Digite um número: ))print "sum(%d) = %d" % (n, funcoes.somatorio(n)) nome_modulo.funcao
    19. 19. Outras formas de importação# -*- coding: latin-1 -*-from funcoes import *n = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, fatorial(n))n = int(raw_input(Digite um número: ))print "sum(%d) = %d" % (n, somatorio(n))
    20. 20. Outras formas de importação from <nome_modulo> import <parte|*># -*- coding: latin-1 -*-from funcoes import *n = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, fatorial(n))n = int(raw_input(Digite um número: ))print "sum(%d) = %d" % (n, somatorio(n))
    21. 21. Outras formas de importação from <nome_modulo> import <parte|*># -*- coding: latin-1 -*-from funcoes import *n = int(raw_input(Digite um número: ))print "fat(%d) = %d" % (n, fatorial(n))n = int(raw_input(Digite um número: ))print "sum(%d) = %d" % (n, somatorio(n)) sem o nome do módulo !
    22. 22. Outras formas de importação• Você pode importar apenas uma função, isso diminui o uso de memória pela sua aplicação ! # -*- coding: latin-1 -*- from funcoes import fatorial n = int(raw_input(Digite um número: )) print "fat(%d) = %d" % (n, fatorial(n))
    23. 23. Atenção• Quando se importa um módulo o seu conteúdo é executado;• Portanto, se no corpo do módulo existirem comandos soltos, ou seja, que não estejam dentro de uma função, estes comandos serão executados sempre que o módulo for importado !
    24. 24. Exemplo• Vamos modificar o nosso módulo “funcoes”, execute o módulo “principal” e veja o que acontece: # -*- coding: latin-1 -*- def fatorial(n): if n == 0: return 1; return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0; return n + somatorio(n - 1) print Módulo funcoes carregado !
    25. 25. Mas ...• E se eu quiser que o meu módulo tenha apenas funções quando for importado, mas que faça alguma coisa quando for executado diretamente ?
    26. 26. Ponto de Entrada “main”• Aqui está o truque para fazer isso: # -*- coding: latin-1 -*- def fatorial(n): if n == 0: return 1; return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0; return n + somatorio(n - 1) if __name__ == "__main__": print Módulo funcoes carregado !
    27. 27. Pacotes• Pacotes são diretórios onde podemos agrupar os nossos módulos;• São uma forma de organização;• Todo pacote pode ter um módulo chamado __init__ que será importado automaticamente sempre que alguém utilizar o pacote.
    28. 28. Exemplo• Crie um PyDev package chamado util em seu projeto;• Veja que automaticamente foi criado um módulo __init__;• Movam o módulo funcoes (é só arrastar com o mouse) para o pacote util.
    29. 29. Modificando o módulo principal # -*- coding: latin-1 -*- from util.funcoes import * n = int(raw_input(Digite um número: )) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input(Digite um número: )) print "sum(%d) = %d" % (n, somatorio(n))
    30. 30. Modificando o módulo principal from <pacote>.<nome_modulo> import <parte|*> # -*- coding: latin-1 -*- from util.funcoes import * n = int(raw_input(Digite um número: )) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input(Digite um número: )) print "sum(%d) = %d" % (n, somatorio(n))
    31. 31. E o __init__ ?• Vamos adicionar algum conteúdo a este módulo para ver o seu funcionamento: print "Pacote util carregado !"• Agora, executem novamente o módulo principal.
    32. 32. Documentação• A documentação de funções em Python é feita por uma String de múltiplas linhas logo em seu início;• Toda entidade de Python (objetos, etc) têm um atributo __doc__ que permite visualizar esta documentação.
    33. 33. Exemplo• No módulo util.funcoes: def fatorial(n): Esta função calcula o fatorial de um número if n == 0: return 1; return n * fatorial(n - 1)• Módulo principal: from util.funcoes import fatorial print fatorial.__doc__
    34. 34. Módulos externos• Infelizmente Python não possui um procedimento padrão para instalação de módulos externos;• Cada plataforma possui a sua estratégia;• Veremos como fazer a instalação de um módulo PIL (Python Imaging Library);• Este módulo possui funções para manipulação avançada de imagens.
    35. 35. Instalando o PIL MacOSX - Snow Leopard• É a instalação mais complicada !• É necessário antes ter instalado o XCode, pacote de desenvolvimento da Apple que vem nos DVDs de instalação do Mac;• É necessário fazer o download da libjpeg e do PIL: • http://ethan.tira-thompson.org/Mac_OS_X_Ports.html • http://www.pythonware.com/products/pil/
    36. 36. Instalando o PILMacOSX - Snow Leopard• Instale a libjpeg (pacote dmg);• Descompacte o PIL (Imaging-1.1.7.tar.gz);• Dentro da pasta descompactada digite: • sudo python setup.py build • sudo python setup.py install
    37. 37. Instalando o PIL Ubuntu• No terminal digite: • sudo apt-get install python-imaging• É só isso !
    38. 38. Instalando o PIL Windows• Faça o download do instalador para Windows no endereço: • http://www.pythonware.com/products/pil/• Execute o instalador: • PIL-1.1.7.win32-py2.6.exe• É só isso !
    39. 39. Configurando o PyDev• Para adicionar módulos externos ao seu projeto PyDev é necessário:• Clique com o botão direito do mouse sobre o projeto e escolha “Properties”;• Selecione a sessão “PyDev - PYTHONPATH”;• Selecione a aba “External Libraries”;• Clique no botão “Add source folder”;• Localize o diretório onde o PIL foi instalado: • é sempre bom prestar atenção nos instaladores !• Clique no botão “OK”.
    40. 40. Exemplo • Crie um módulo chamado testepil:import Imageim = Image.open(raw_input("Digite o caminho para uma imagem: "))print im.format, im.size, im.mode
    41. 41. Exemplo Criando um thumbnailimport Imagetamanho = (128, 128)entrada = raw_input("Digite o caminho para uma imagem: ")im = Image.open(entrada)im.thumbnail(tamanho)saida = raw_input("Digite o caminho para o thumbnail: ")im.save(saida, "JPEG")
    42. 42. Desafio para já• Modifiquem o gerador de álbuns para: • Gerar um thumbnail para cada foto; • Exibir estes thumbnails na página do álbum;• Bônus: O usuário deveria poder escolher o tamanho do thumbnail !
    43. 43. # -*- coding: latin-1 -*-import osimport Imagecabecalho = <html> <head><title></title></head> <body> <h1>%s</h1>corpo = <a href="%s"><img src="%s"/></a>rodape = </body></html>
    44. 44. diretorio = raw_input(Qual o diretório das imagens ?)formato = raw_input(Qual o formato das imagens ?)album = raw_input(Qual o nome do álbum ?)tamanho = int(raw_input(Qual o tamanho do thumbnail ?))pagina = cabecalho % albumfor arquivo in os.listdir(diretorio): if arquivo.endswith(formato): #Geração do thumbnail arquivoThumb = arquivo.split(.)[0] + "_thumb.jpg" im = Image.open(os.path.join(diretorio, arquivo)) im.thumbnail((tamanho, tamanho)) im.save(os.path.join(diretorio, arquivoThumb), "JPEG") pagina += corpo % (arquivo, arquivoThumb)pagina += rodapearquivo = open(os.path.join(diretorio, "album.html"), "w")arquivo.write(pagina)arquivo.close()
    45. 45. Escrevendo nas imagensimport Image, ImageFont, ImageDrawentrada = raw_input("Digite o caminho para uma imagem: ")im = Image.open(entrada)f = ImageFont.load_default()d = ImageDraw.Draw(im)d.text((0, 0), "Fotos de Bruno", font=f, fill="rgb(255,0,0)")im.save(entrada.split(.)[0] + "2.jpg", "JPEG")
    46. 46. Orientação a objetos• Python é uma linguagem orientada a objetos;• A conceito básico da orientação a objetos são as classes;• A sintaxe para criar uma classe em Python é: class NomeDaClasse: corpo da classe
    47. 47. Exemploclass Pessoa: def qualSeuNome(self): print "Bruno"p = Pessoa();p.qualSeuNome()
    48. 48. Exemplo Definição da classeclass Pessoa: def qualSeuNome(self): print "Bruno"p = Pessoa();p.qualSeuNome()
    49. 49. Exemplo Definição da classeclass Pessoa: def qualSeuNome(self): print "Bruno" Métodop = Pessoa();p.qualSeuNome()
    50. 50. Exemplo Definição da classe class Pessoa: def qualSeuNome(self):Criação de um objeto print "Bruno" Método p = Pessoa(); p.qualSeuNome()
    51. 51. Exemplo Definição da classe class Pessoa: def qualSeuNome(self):Criação de um objeto print "Bruno" Método p = Pessoa(); p.qualSeuNome() Chamada de um método
    52. 52. Construtores• Objetos são criados através de um método especial chamado de construtor;• Toda classe possui pelo menos um construtor que será criado caso o programador não defina nenhum;• O construtor em Python é definido pelo nome __init__: class Pessoa: def __init__(self, nome): self.nome = nome def qualSeuNome(self): print self.nome
    53. 53. E o self ?• Self é uma referência para o próprio objeto;• Sempre o primeiro parâmetro de um método é self (com exceção de métodos de classe - estáticos);• Parâmetros de classes são definidos dinamicamente dentro dos métodos e não no corpo das classes.
    54. 54. Polimorfismo ?• Poli o quê ? • Em linguagens tradicionais (Java, C++ e C#) é possível definir métodos com o mesmo nome e assinaturas diferentes;• Em Python isto não é possível pois os métodos têm parâmetros opcionais.
    55. 55. Exemploclass Pessoa: def __init__(self, nome= "Fulano"): self.nome = nome def qualSeuNome(self): print self.nomep1 = Pessoa()p1.qualSeuNome()p2 = Pessoa("Bruno")p2.qualSeuNome()
    56. 56. Exemploclass Pessoa: def __init__(self, nome=None): if nome: self.nome = nome else: self.nome = "Fulano" def qualSeuNome(self): print self.nomep1 = Pessoa()p1.qualSeuNome()p2 = Pessoa("Bruno")p2.qualSeuNome()
    57. 57. Exemplo Valor nulo (vazio)class Pessoa: def __init__(self, nome=None): if nome: self.nome = nome else: self.nome = "Fulano" def qualSeuNome(self): print self.nomep1 = Pessoa()p1.qualSeuNome()p2 = Pessoa("Bruno")p2.qualSeuNome()
    58. 58. Exemplo Valor nulo (vazio)class Pessoa: def __init__(self, nome=None): if nome: self.nome = nome Equivalente a null ou nil else: self.nome = "Fulano" def qualSeuNome(self): print self.nomep1 = Pessoa()p1.qualSeuNome()p2 = Pessoa("Bruno")p2.qualSeuNome()
    59. 59. Exemplo Valor nulo (vazio) class Pessoa: def __init__(self, nome=None): if nome:O if assim testa se o valor self.nome = nome Equivalente a null ou nil é diferente de None else: self.nome = "Fulano" def qualSeuNome(self): print self.nome p1 = Pessoa() p1.qualSeuNome() p2 = Pessoa("Bruno") p2.qualSeuNome()
    60. 60. Métodos e Atributos de classe (estáticos) class Pessoa: qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 def qualSeuNome(self): print self.nome @staticmethod def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
    61. 61. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 def qualSeuNome(self): print self.nome @staticmethod def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
    62. 62. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
    63. 63. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod Modificador de método def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
    64. 64. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod Modificador de método def quantidadePessoas(): return Pessoa.qtd Não tem self p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
    65. 65. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod Modificador de método def quantidadePessoas(): return Pessoa.qtd Não tem self p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") Acessando método estático print str(Pessoa.quantidadePessoas())
    66. 66. Herança• Uma classe pode herdar os métodos e atributos de outras;• A intenção é reusar código;• Python suporta herança simples e composta;• A forma geral é a seguinte: class NomeClasse(Super1, Super2, Super3): corpo da classe
    67. 67. import math Exemploclass FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): passclass Triangulo(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4)q = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    68. 68. import math Exemploclass FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass é uma instrução que não faz nada ! pass está aqui pois todo método precisa de um corpoclass Triangulo(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4)q = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    69. 69. import math Exemploclass FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass é uma instrução que não faz nada ! pass está aqui pois todo método precisa de um corpoclass Triangulo(FormaGeometrica): note que não foi definido um construtor def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4)q = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    70. 70. import math Exemploclass FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass é uma instrução que não faz nada ! pass está aqui pois todo método precisa de um corpoclass Triangulo(FormaGeometrica): note que não foi definido um construtor def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4) chamando o construtor da superclasseq = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    71. 71. Erros e Exceções• O tratamento de erros em Python é feito através do tratamento de exceções;• A idéia é a seguinte: • o código que encontra um erro lança uma exceção; • a execução do programa é interrompida no ponto onde a exceção foi lançada; • o código continua em um bloco de tratamento de exceções, caso exista; • se não existir, o programa será interrompido.
    72. 72. Exemplo# -*- coding: latin-1 -*-idade = 0while True: try: idade = int(raw_input("Digite a sua idade: ")) break except ValueError: print "Você deve digitar um número válido !"print "A sua idade é %d" % idade
    73. 73. Exemplo# -*- coding: latin-1 -*-idade = 0while True: try: idade = int(raw_input("Digite a sua idade: ")) break só será executado caso não haja uma exceção except ValueError: print "Você deve digitar um número válido !"print "A sua idade é %d" % idade
    74. 74. Exemplo# -*- coding: latin-1 -*-idade = 0while True: try: idade = int(raw_input("Digite a sua idade: ")) break só será executado caso não haja uma exceção except ValueError: print "Você deve digitar um número válido !"print "A sua idade é %d" % idade só será executado caso haja uma exceção
    75. 75. Sugestão • Se em um programa você precisar ler mais de uma vez um valor inteiro do teclado, crie uma função:# -*- coding: latin-1 -*-def lerInteiro(mensagem, mensagemErro="Você deve digitar um número válido !"): valor = 0 while True: try: valor = int(raw_input(mensagem)) break except ValueError: print mensagemErro return valoridade = lerInteiro("Digite a sua idade: ")print "A sua idade é %d" % idade
    76. 76. Qual exceção devo tratar ? • Como descobrir o nome da exceção ? • É só provocar o seu lançamento ! • Por exemplo, execute o programa abaixo, digite uma letra e veja a sua saída: idade = int(raw_input("Digite a sua idade: "))Traceback (most recent call last): File "/Users/brunocatao/Documents/workspace/Aula1/src/excecoes.py", line 2, in<module> idade = int(raw_input("Digite a sua idade: "))ValueError: invalid literal for int() with base 10: a
    77. 77. Qual exceção devo tratar ? • Como descobrir o nome da exceção ? • É só provocar o seu lançamento ! • Por exemplo, execute o programa abaixo, digite uma letra e veja a sua saída: idade = int(raw_input("Digite a sua idade: "))Traceback (most recent call last): File "/Users/brunocatao/Documents/workspace/Aula1/src/excecoes.py", line 2, in<module> idade = int(raw_input("Digite a sua idade: "))ValueError: invalid literal for int() with base 10: a nome da exceção !

    ×